概述
JdbcTemplateAutoConfiguration
是Spring Boot
关于JdbcTemplate
工作组件的自动配置类。它在单数据源情况下定义如下bean
:
bean JdbcTemplate jdbcTemplate
仅在类型为
JdbcOperations
的bean
不存在时才定义bean NamedParameterJdbcTemplate namedParameterJdbcTemplate
仅在容器中存在单
JdbcTemplate bean
组件并且类型为NamedParameterJdbcOperations
的bean
尚未定义时才定义
源代码
源代码版本 : spring-boot-autoconfigure-2.1.3.RELEASE
package org.springframework.boot.autoconfigure.jdbc;
// 省略 import 行
@Configuration
// 仅在类 DataSource,JdbcTemplate 存在于 classpath 时生效,
// 这两个类属于 spring-jdbc
@ConditionalOnClass({ DataSource.class, JdbcTemplate.class })
// 仅在单数据源bean存在时才生效
@ConditionalOnSingleCandidate(DataSource.class)
// 在数据源自动配置应用之后应用
@AutoConfigureAfter(DataSourceAutoConfiguration.class)
// 确保前缀为 spring.jdbc 的配置参数被加载到 bean JdbcProperties
@EnableConfigurationProperties(JdbcProperties.class)
public class JdbcTemplateAutoConfiguration {
// 内嵌配置类
@Configuration
static class JdbcTemplateConfiguration {
private final DataSource dataSource;
private final JdbcProperties properties;
JdbcTemplateConfiguration(DataSource dataSource, JdbcProperties properties) {
this.dataSource = dataSource;
this.properties = properties;
}
// 定义 bean JdbcTemplate jdbcTemplate
@Bean
@Primary
// 仅在此bean没有被定义时才定义
@ConditionalOnMissingBean(JdbcOperations.class)
public JdbcTemplate jdbcTemplate() {
JdbcTemplate jdbcTemplate = new JdbcTemplate(this.dataSource);
JdbcProperties.Template template = this.properties.getTemplate();
jdbcTemplate.setFetchSize(template.getFetchSize());
jdbcTemplate.setMaxRows(template.getMaxRows());
if (template.getQueryTimeout() != null) {
jdbcTemplate
.setQueryTimeout((int) template.getQueryTimeout().getSeconds());
}
return jdbcTemplate;
}
}
// 内嵌配置类
@Configuration
// 导入 JdbcTemplateConfiguration 配置类
@Import(JdbcTemplateConfiguration.class)
static class NamedParameterJdbcTemplateConfiguration {
// 定义 bean NamedParameterJdbcTemplate namedParameterJdbcTemplate
@Bean
@Primary
@ConditionalOnSingleCandidate(JdbcTemplate.class)
@ConditionalOnMissingBean(NamedParameterJdbcOperations.class)
public NamedParameterJdbcTemplate namedParameterJdbcTemplate(
JdbcTemplate jdbcTemplate) {
return new NamedParameterJdbcTemplate(jdbcTemplate);
}
}
}