Spring Boot 自动配置 : JdbcTemplateAutoConfiguration

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述

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自动配置机制基于 Spring 框架的核心功能,包括依赖注入(Dependency Injection)和自动装配(Bean Auto-Wiring)。以下是关于 Spring Boot 自动配置原理的详细说明: #### 核心概念 1. **启动类与注解** 启动类通常使用 `@SpringBootApplication` 注解标记。该注解是一个复合注解,内部包含 `@EnableAutoConfiguration`、`@ComponentScan` 和 `@SpringBootConfiguration` 等[^1]。这些注解共同作用,触发了自动配置机制。 2. **自动配置的触发** `@EnableAutoConfiguration` 是自动配置的核心注解,它通过 SPI 机制从 `spring.factories` 文件中加载所有可能的自动配置类,并根据当前项目的依赖和运行环境动态决定是否启用某个配置类[^2]。 3. **spring.factories 文件** Spring Boot 在类路径下的 `META-INF/spring.factories` 文件中定义了所有的自动配置类。这些类以键值对的形式列出,其中键为 `org.springframework.boot.autoconfigure.EnableAutoConfiguration`,值为一系列配置类的全限定名[^3]。 #### 自动配置的工作流程 - 当应用启动时,`SpringApplication.run()` 方法会扫描类路径下的 `spring.factories` 文件,读取并加载所有标注了 `@Configuration` 的自动配置类。 - 每个自动配置类都通过条件注解(如 `@ConditionalOnClass`、`@ConditionalOnMissingBean` 等)来判断是否满足启用条件。例如,如果项目中存在某个类或依赖,则启用相应的配置。 - 如果条件满足,Spring Boot 会将自动配置类中的 Bean 定义注册到 Spring 容器中,从而完成自动装配。 #### 示例代码 以下是一个典型的 Spring Boot 启动类示例: ```java @SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } } ``` 在上述代码中,`@SpringBootApplication` 触发了自动配置机制。Spring Boot 会根据 `spring.factories` 文件中的配置类列表,结合项目的实际依赖和环境,动态决定哪些 Bean 需要被注册到 Spring 容器中[^3]。 #### 条件注解的作用 条件注解是实现自动配置的关键。以下是一些常用的条件注解及其作用: 1. **@ConditionalOnClass** 仅当指定的类存在于类路径中时,才启用该配置[^2]。 2. **@ConditionalOnMissingBean** 仅当容器中不存在指定类型的 Bean 时,才创建新的 Bean[^2]。 3. **@ConditionalOnProperty** 仅当配置文件中存在指定的属性且满足特定条件时,才启用该配置。 #### 自动配置类的结构 一个典型的自动配置类如下所示: ```java @Configuration @ConditionalOnClass(JdbcTemplate.class) @ConditionalOnSingleCandidate(DataSource.class) public class JdbcTemplateAutoConfiguration { @Bean @ConditionalOnMissingBean public JdbcTemplate jdbcTemplate(DataSource dataSource) { return new JdbcTemplate(dataSource); } } ``` 上述代码中,`JdbcTemplateAutoConfiguration` 类会在以下条件下生效: - 项目中存在 `JdbcTemplate` 类。 - 容器中存在唯一的 `DataSource` Bean。 - 容器中尚未定义 `JdbcTemplate` Bean。 #### 总结 Spring Boot自动配置机制通过 `@EnableAutoConfiguration` 注解和 `spring.factories` 文件实现了高度灵活的配置方式。它能够根据项目的依赖和运行环境动态决定哪些 Bean 需要被注册到 Spring 容器中,从而极大地简化了开发者的配置工作[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值