本篇文章带大家了解一下SpringBoot中JdbcTemplate的自动配置相关源码分析,同时简单了解一下在使用JdbcTemplate的方法时可能产生的误区。

JDBCTemplate的方法误解

在使用JdbcTemplate时最容易产生误解的就是queryForList方法。该方法的相关源码如下:

 

@Overridepublic <T> List<T> queryForList(String sql, Class<T> elementType) throws DataAccessException {  return query(sql, getSingleColumnRowMapper(elementType));}

通过方法的定义,我们很容易以为可以用如下的方式进行使用:

 

  •  
@Overridepublic List<Order> findAllError() {  return jdbcTemplate.queryForList("select * from tb_order",Order.class);}

但当你真的如此写的时候,你会发现并没有达到预期的目的,反而会抛出异常。

 

@Configuration(proxyBeanMethods = false)@ConditionalOnMissingBean(JdbcOperations.class)class JdbcTemplateConfiguration {
@Bean @Primary JdbcTemplate jdbcTemplate(DataSource dataSource, JdbcProperties properties) { JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); JdbcProperties.Template template = properties.getTemplate(); jdbcTemplate.setFetchSize(template.getFetchSize()); jdbcTemplate.setMaxRows(template.getMaxRows()); if (template.getQueryTimeout() != null) { jdbcTemplate.setQueryTimeout((int) template.getQueryTimeout().getSeconds()); } return jdbcTemplate; }}

在该源码中,我们可以看到实例化了一个JdbcTemplate,使用了DataSourceAutoConfiguration中配置好的数据源和application中(最终封装到JdbcProperties)对应的属性。

而我们之所以能够在程序中直接注入JdbcTemplate就可以使用,正是因为Spring Boot通过该自动配置类为我们实例化好了默认的JdbcTemplate对象。

了解了源代码,了解了Spring Boot为我们做了什么,当我们想自定义配置时,直接通过Java配置的形式实例化对应的JdbcTemplate即可。而后面我们自定义多数据源便是在该理论基础上进行操作的。

小结

本文我们通过分析JdbcTemplate方法源代码中的定义,解决了对方法望文生义的理解。同时,针对Spring Boot中JdbcTemplate自动化配置的学习和了解,也为我们后面自定义JdbcTemplate做好了铺垫。