Spring Boot 自动配置 : JdbcTemplateAutoConfiguration

概述

JdbcTemplateAutoConfigurationSpring Boot关于JdbcTemplate工作组件的自动配置类。它在单数据源情况下定义如下bean :

  • bean JdbcTemplate jdbcTemplate

    仅在类型为JdbcOperationsbean不存在时才定义

  • bean NamedParameterJdbcTemplate namedParameterJdbcTemplate

    仅在容器中存在单JdbcTemplate bean组件并且类型为NamedParameterJdbcOperationsbean尚未定义时才定义

源代码

源代码版本 : 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);
		}

	}

}

你可能感兴趣的:(Spring,Boot,Spring,Boot,自动配置)