加入收藏 | 设为首页 | 会员中心 | 我要投稿 站长网 (https://www.zhandada.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

SpringBoot数据库源码解析Template实例化操作

发布时间:2022-11-03 15:01:33 所属栏目:MySql教程 来源:互联网
导读: Jdbc TemplateAutoConfiguration
在实践过程中,除了数据源的配置外,我们还会经常用到 Jdbc Template。Jdbc Template是 Spring 对数据库的操作在 jdbc 的封装。本节我们简单看一下 Jdbc T

Jdbc TemplateAutoConfiguration

在实践过程中,除了数据源的配置外,我们还会经常用到 Jdbc Template。Jdbc Template是 Spring 对数据库的操作在 jdbc 的封装。本节我们简单看一下 Jdbc Template 实例化操作,不做过多拓展。

JdbcTemplate 的自动配置是通过 Jdbc TemplateAutoConfiguration 来完成的,与上面讲到的 DataSourceAutoConfiguration 的自动配置 在 spring.factories 中注册位置一样。 源代码如下。

@Configuration(proxyBeanMethods = false)
@ConditionalOnClass({ DataSource. class, JdbcTemplate.class })
@ConditionalOnSingleCandidate(DataSource.class)
@AutoConfigureAfter (DataSourceAutoConfiguration. class)
@EnableConfigurationProperties (JdbcProperties.class)
@Import({ JdbcTemplateConfiguration. class, NamedParameterJdbcTemplateConfig
uration.
class })
public class JdbcTemplateAutoConfiguration {
}
}

JdbcTemplateAutoConfiguration 的具体实现为空,注解部分通过@ConditionalOn-Class指 定 必 须 存 在 DataSource 和 JdbcTemplate 类 才 会 进 行 实 例 化 ;

@ConditionalOnSingle-Candidate 指定只存在 -一个候选 DataSource 的 Bean 时才会实例化:@AutoConfigureAfter 指定在初始化 DataSourceAutoConfiguration 之后才会进行实例化;

@EnableConfigurationProperties 指定了配置类;

@lmport导入了JdbcTemplateConfiguration和NamedParameterJdbcTemplateConfigurati-on 两 个 配 置 类 , 其 中 JdbcTemplateConfiguration 便是用来实例化 Jdbc Template 的。

@Configuration(proxyBeanMethods = false)
@ConditionalOnMi ssingBean( JdbcOperations. class)
class JdbcTemplateConfiguration {
@Bean@Primary
Jdbc Template jdbcTemplate(DataSource dataSource, JdbcProperties propertie
//根据数据源创建 Jdbc Template
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
JdbcProperties . Template template = properties . getTemplate();
//设置配置文件中的配置项到 dbc Template
jdbcTemplate . setFetchSize(template . getFetchSize());
jdbcTemplate . setMaxRows (template . getMaxRows());
if (template . getQueryTimeout() != null) {
jdbcTemplate. setQueryTimeout((int) template. getQueryTimeout(). getSeco
nds());
return jdbcTemplate;
}
}

JdbcTemplate 的实例化操作很简单,根据数据源创建-一个 JdbcTemplate 对象,并设置JdbcProperties 中对应的配置,分别设置了获取数据大小、最大行数、查询超时时间等内容。

JdbcTemplate 内部提供了我们操作数据库常见方法,比如 query、queryForObject、update、execute 等, 在此就不展开了。

Jdbc TemplateAutoConfiguration 导入的 NamedParameterJdbcTemplateConfiguration 主要用来初始化 NamedParameterJdbcTemplate。NamedParameterJdbcTemplate 相当于Jdbc- Template 的包装类,提供了基于占位符的 SQL 的功能。

@Configuration(proxyBeanMethods = false)Q
@ConditionalOnsingleCandidate(JdbcTemplate . class)
@ConditionalOnMiss ingBean(NamedParameterJdbcOperations .class)
class NamedParameterIdbcTemplateConfiguration {
@Bean
@Primary
NamedParameterJdbcTemplate namedParameterJdbcTemplate(JdbcTemplate jdbcTe
mplate)
return new NamedParameterIdbcTemplate(jdbcTemplate);
}
}

NamedParameterJdbcTemplate 的实例化操作非常简单,满足自动配置条件时,以JdbcTemplate 为 参数 new-个 NamedParameterJdbc Template 即可。

无论是 JdbcTemplate 还是 NamedParameterJdbcTemplate 的实例化,注解部分都添加了@Primary,用来表示当存在多个同类型的对象时,当前对象会被优先注入。关于 JdbcTemplate 的 JdbcTemplateAutoConfiguration 配置类我们就讲这么多。

数据库实例_开放数据应用实例_sql server教程库实例教程

异常案例分析

Spring Boot 中大多数自动配置引入之后不需要用户操作什么便可自动生效,但是数据源的配置算是一个例外。如果只是引入了 spring-boot-starter-jdbc 这个 starter,启动的时候是会抛出异常的。

这是为什么呢?这是因为如果引入了该 starter,等于变相引入了 spring-jdbc,而数据源自动化配置类 DataSourceAutoConfiguration 生效的限定条件为 classpath 中司时存在javax.sql.DataSource和org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType 两个条件都满足,数据源自动配置生效,开始初始化相关信息。而此时,在 application.properties 中如果没有配置连接数据库的相关配置数据库实例,便会抛出异针对此异常,如果暂时不考虑使用数据库连接,可去掉 spring-boot-starter-jdbc 的依赖,或明确声明排除 DataSourceAutoConfiguration 的自动配可通过注解或配置文件两种形式中的一-种来达到目的。在启动类上添加注解排除方式。

@EnableAutoConfigurat ion(exclude = DataSourceAutoConfiguration. class)通过配置文件排除方式。

spring. autoconfigure . exclude=org . spr ingframework . boot . autoconfigure. jdbc.DataSourceAutoConfiguration

开放数据应用实例_数据库实例_sql server教程库实例教程

小结

本章重点介绍了 DataSourceAutoConfiguration 类和 Jdbc TemplateAutoConfiguration 类的 自 动 配 置 。 关 于 数 据 库 的 自 动 配 置 还 有 很 多 相 关 配 置 和 功 能 实 现 , 比 如JndiDataSource-AutoConfiguration 、 XADataSourceAutoConfiguration 、 DataSourceTransactionManagerAuto-Configuration 等, 感兴趣的朋友可以按照本章介绍的方法和思路进行源码的学习。

数据库实例_sql server教程库实例教程_开放数据应用实例

本文给大家讲解的内容是SpringBoot数据库配置源码解析:Jdbc Template 实例化操作下篇文章给大家讲解的是SpringBoot消息源码解析;觉得文章不错的朋友可以转发此文关注小编;感谢大家的支持!

(编辑:站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!