Search code examples
springjdbcsingletonspring-jdbc

Singleton vs prototype JdbcTemplate


Per Spring documentation, a JDBCTemplate class "can be used within a service implementation via direct instantiation with a DataSource reference, or get prepared in an application context and given to services as bean reference."

public class JdbcCorporateEventDao implements CorporateEventDao {

    private JdbcTemplate jdbcTemplate;

    public void setDataSource(DataSource dataSource) {
        this.jdbcTemplate = new JdbcTemplate(dataSource);
    }

}

I was wondering, what is the advantage of this solution over define the jdbctemplate as singleton in the context and directly inject it in the Dao

 public class JdbcCorporateEventDao implements CorporateEventDao {
        @Autowired
        private JdbcTemplate jdbcTemplate;
    
        public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
            this.jdbcTemplate = jdbcTemplate;
        }
    
    }

Solution

  • From the class-level documentation of JdbcTemplate:

    Can be used within a service implementation via direct instantiation with a DataSource reference, or get prepared in an application context and given to services as bean reference.

    Either is OK. Here I have a large application (50 DAOs, 100 concurrent users) and there is one jdbcTemplate object for the entire application, defined in the Spring context. This works fine.