实例源码_SpringBoot数据库源码解析Template实例化操作
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, NamedParameterJdbcTemplateConfiguration.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@PrimaryJdbc Template jdbcTemplate(DataSource dataSource, JdbcProperties propertie//根据数据源创建 Jdbc TemplateJdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);JdbcProperties . Template template = properties . getTemplate();//设置配置文件中的配置项到 dbc TemplatejdbcTemplate . setFetchSize(template . getFetchSize());jdbcTemplate . setMaxRows (template . getMaxRows());if (template . getQueryTimeout() != null) {jdbcTemplate. setQueryTimeout((int) template. getQueryTimeout(). getSeconds());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@PrimaryNamedParameterJdbcTemplate namedParameterJdbcTemplate(JdbcTemplate jdbcTemplate)return new NamedParameterIdbcTemplate(jdbcTemplate);}}
NamedParameterJdbcTemplate 的实例化操作非常简单,满足自动配置条件时,以JdbcTemplate 为 参数 new-个 NamedParameterJdbc Template 即可。
无论是 JdbcTemplate 还是 NamedParameterJdbcTemplate 的实例化,注解部分都添加了@Primary,用来表示当存在多个同类型的对象时,当前对象会被优先注入。关于 JdbcTemplate 的 JdbcTemplateAutoConfiguration 配置类我们就讲这么多。
异常案例分析
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
小结
本章重点介绍了 DataSourceAutoConfiguration 类和 Jdbc TemplateAutoConfiguration 类的 自 动 配 置 。 关 于 数 据 库 的 自 动 配 置 还 有 很 多 相 关 配 置 和 功 能 实 现 , 比 如JndiDataSource-AutoConfiguration 、 XADataSourceAutoConfiguration 、 DataSourceTransactionManagerAuto-Configuration 等, 感兴趣的朋友可以按照本章介绍的方法和思路进行源码的学习。
本文给大家讲解的内容是SpringBoot数据库配置源码解析:Jdbc Template 实例化操作
- 下篇文章给大家讲解的是SpringBoot消息源码解析;
- 觉得文章不错的朋友可以转发此文关注小编;
- 感谢大家的支持!
实例源码_SpringBoot数据库源码解析Template实例化操作相关推荐
- 候选码mysql_数据库中 码、候选码、主码 的区别
主码 \subseteq 候选码 \subseteq 码 ps:元组理解为一张表的某一行,属性理解为一张表的某一列,属性名就是列的名字(字段). 1(码):码是可以确定一个元组的所有信息的属性名或属性 ...
- springboot 源码_springboot框架源码分享
先转发,加"大数据java架构师"关注,然后私信我"框架"即可免费获取源码下载地址 一个 Java EE 企业级快速开发平台,基于经典技术组合(Spring B ...
- 漂亮大气VIP会员介绍页面 html单页源码无需数据库
介绍: 扒的某站漂亮大气VIP会员介绍页面 html单页源码无需数据库 源码下载地址:扒的某站漂亮大气VIP会员介绍页面 html单页源码无需数据库.zip - 蓝奏云https://qumaw.la ...
- php xml expat,php 使用expat方式解析xml文件操作示例
本文实例讲述了php 使用expat方式解析xml文件操作.分享给大家供大家参考,具体如下: test.xml: George John Reminder George2 John2 Reminder ...
- openGauss数据库源码解析系列文章——openGauss开发快速入门(一)
作为openGauss数据库开发者,在基于开源社区的openGauss版本进行二次开发的过程中,需要完成软件包获取.源码了解.代码修改.编译发布等过程,同时还需要安装数据库以了解数据库的基本特点.验证 ...
- openGauss数据库源码解析系列文章——openGauss开发快速入门(二)
在上一篇openGauss数据库源码解析系列文章--openGauss开发快速入门(上)中,我们介绍了openGauss的安装部署方法,本篇将具体介绍openGauss基本使用. 二. openGau ...
- openGauss数据库源码解析系列文章--openGauss简介(一)
openGauss数据库是华为深度融合在数据库领域多年经验,结合企业级场景要求推出的新一代企业级开源数据库.此前,Gauss松鼠会已经发布了openGauss数据库核心技术系列文章,介绍了openGa ...
- 微信公众平台开发教程(四) 实例入门:机器人(附源码)
微信公众平台开发教程(四) 实例入门:机器人(附源码) 上一篇文章,写了基本框架,可能很多人会觉得晕头转向,这里提供一个简单的例子来予以说明,希望能帮你解开谜团. 一.功能介绍 通过微信公众平台实现在 ...
- spring 源码分析(1)-xml文件解析
我们在最开始接触spring的时候,看到不少书spring入门的例子如下 ApplicationContext atx = new ClassPathXmlApplicationContext(&qu ...
最新文章
- conda (picard)
- 如何点击按钮弹出弹框显示几秒_产品反馈设计:如何与用户有效沟通?
- Eclipse编程快捷键
- [内核编程] 内核环境及其特殊性,驱动编程基础篇
- maven之阿里云Maven镜像的使用
- pandas追加写入excel_[Excel]如果你爱Excel,请学好pandas
- mysql中3个月之前日期_在MySQL中从当前日期选择当前日期到3个月之间的日期?
- 关于Android的Service知识点,你知道吗?
- 武春岭 《C语言程序设计》教案PPT,重庆出版社出版,李勇主编的大一C语言课程ppt第1章.ppt...
- 推荐3款简约好用录屏工具
- 和大家一起分享几组Android游戏源码
- RK3399 Android上面调试IMX291 Camera驱动
- Renesas:RH850的FDL库的移植与使用
- C#编程--ribbon界面介绍
- 信用卡欺诈检测:2021 年顶级机器学习解决方案
- VS Code 常用必备插件
- ArithmeticException - 没有可确切表示的小数结果
- 2021-06-21指针与变量 和字符数组作业。
- 已解决ValueError: More than 4094 XFs (styles)
- Django 之验证码实现
热门文章
- abap alv新增行数据_ALV DMEO 09:REUSE_ALV_GRID_DISPLAY 使用HTML 居中 颜色大小 加粗 斜体 超链接 控制...
- docker 内部ping不通宿主机_Docker容器数据管理
- php+mysql案例含源码_【专注】Zabbix源码安装教程—步骤详解(1)安装前准备
- bat批处理命令大全_DOS使用环境变量图文教程,bat批处理脚本查看调用环境变量命令...
- python利用win32com读取doc和pdf内容,并保存到文件
- 如何避免把 Python 代码写得跟屎一样?
- 受用一生的高效 PyCharm 使用技巧(五)
- 学python还是不会编程_你真的不学Python吗?学习Python的四大理由!
- python1080p壁纸高清图片_Python爬取高清桌面壁纸(附源码),直接运行即可
- mybatis默认的数据源连接池(PooledDataSource和UnPooledDataSource)