Spring provides a special DataSource that allows you to do this: SingleConnectionDataSource
Changing your code to this should do the trick:
SingleConnectionDataSource dataSource = new SingleConnectionDataSource();
....
// The rest stays as is
For use in multi-threaded applications, you can make the code re-entrant by borrowing a new connection from the pool and wrapping it around the database-intensive section of code:
// ... this code may be invoked in multiple threads simultaneously ...
try(Connection conn = dao.getDataSource().getConnection()) {
JdbcTemplate db = new JdbcTemplate(new SingleConnectionDataSource(conn, true));
// ... database-intensive code goes here ...
// ... this code also is safe to run simultaneously in multiple threads ...
// ... provided you are not creating new threads inside here
}