Spring Boot 自动配置 : JdbcTemplateAutoConfiguration

JdbcTemplate 自动配置解析
本文介绍 Spring Boot 中 JdbcTemplateAutoConfiguration 类如何自动配置 JdbcTemplate 和 NamedParameterJdbcTemplate。该配置仅在单数据源存在且特定条件满足时生效。

概述

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);
		}

	}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值