SpringBoot 2.X集成 jdbc自动配置原理探究
前言
Springboot对于数据访问层,不管是 SQL还是 NOSQL,Spring Boot 底层都是采用 Spring Data 的方式统一处理。Spring Data 是 Spring 家族中与 Spring Boot、Spring Cloud 齐名且知名项目。想要更好的了解Sping Data,可以参考Sping Data 官网:https://spring.io/projects/spring-data
事实上,Springboot整合jdbc基本上企业都不会这么去使用,但是为什么要学呢?我为什么又要写这么一篇文章呢?也很简单,就像HelloWorld程序一样的道理,毕竟jdbc是连接数据库最基本的基础,不忘基础,重视基础,不忘初心,方得始终。
1、创建jdbc工程环境
创建的时候勾选Web、jdbc、MySQL即可,

pom.xml文件默认会有如下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
如上搭建好之后,应该怎么写才可以实现数据库的访问呢?实际上SpringBoot中,我们只需要简单的配置就可以实现数据库的连接了;
2、编写配置文件
在application.yml配置文件中,编写jdbc常规配置连接
spring:
datasource:
username: root
url: jdbc:mysql://localhost:3306/ufida
password: 123456
driver-class-name: com.mysql.jdbc.Driver
在springboot2.X版本中如果spring.datasource.url不指定时区就会报一个SQLException错误

把上面的URL属性添加时区,如下即可:
url: jdbc:mysql://localhost:3306/ufida?serverTimezone=UTC
需要注意一点的是:我现在使用的MySQL是5.7版本:

配置之后就可以直接去使用了,因为SpringBoot已经默认帮我们进行了自动配置!是不是感动到哭?
3、test测试类测试
@SpringBootTest
class JdbcbootApplicationTests {
//第一步:DI注入数据源
@Autowired
DataSource dataSource;
@Test
void contextLoads() throws SQLException {
//第二步:测试代码
System.out.println("默认使用的数据源:" + dataSource.getClass());
Connection connection = dataSource.getConnection();
System.out.println("获取的连接:" + connection);
connection.close();
}
}

输出结果可以看到默认给我们配置的数据源为 class com.zaxxer.hikari.HikariDataSource , 我们并没有手动配置,到这里,激起了各位的好奇心不知道你们好不好奇,反正宜春很好奇,于是乎全局搜索找到数据源的所有自动配置都在 :DataSourceProperties 文件下,不要问我为啥知道是在这个文件下,给个图你也就和我一样知道了

接下来我们可以来探究下这里自动配置的原理以及能配置哪些属性了

可以看出 Spring Boot 2.2.2 默认使用 com.zaxxer.hikari.HikariDataSource 数据源,而以前版本,比如 Spring Boot 1.5 默认使用 org.apache.tomcat.jdbc.pool.DataSource 作为数据源;至于原因也很简单,听闻HikariDataSource 是当前速度最快的数据源,相比于传统的 C3P0 、DBCP、Tomcat jdbc 等连接池更加牛皮,因此springboot把它作为默认的数据源了。
既然是自动配置,按照springboot的套路,估计有个DataSourceXXXAutoConfiguration的东东,全局搜索一下,
果不其然,有存在一个DataSourceAutoConfiguration的类,我们就来进去逛逛

无非这个类中就是一些数据源、池什么的自动配置,需要注意一点的就是

可以使用 spring.datasource.type 指定自定义的数据源类型,值要使用连接池实现的完全限定名。默认情况下,它是从类路径自动检测的,源码如下:
@Configuration
@ConditionalOnMissingBean({DataSource.class})
@ConditionalOnProperty(
name = {"spring.datasource.type"}
)
static class Generic {
Generic() {
}
@Bean
public DataSource dataSource(DataSourceProperties properties) {
return properties.initializeDataSourceBuilder().build();
}
}
OK,DataSourceAutoConfiguration的源码就看到这,具体的可自行查看。
4、JdbcTemplate自动配置原理
有了数据源HikariDataSource就可以拿到数据库连接java.sql.Connection,有了连接就相当于可以使用连接和原生的 JDBC 语句来操作数据库进行crud,这个点我估计都会想到JdbcTemplate,毕竟好东西都要合理利用!
这里不可以开挂使用第三方数据库操作框架MyBatis,实际上Spring 本身也对原生的JDBC 做了轻量级的封装,没错就是 org.springframework.jdbc.core.JdbcTemplate。
既然是自动配置,我们就应该想到JdbcTemplate 的自动配置原理是依赖 org.springframework.boot.autoconfigure.jdbc 包下的 ,不出意料,该包中果然有JdbcTemplateAutoConfiguration 类。如下

5、Springboot集成jdbc之后CRUD测试
既然能使用jdbcTemplate,就使用它得了,千万记得如下自动注入操作即可
@Autowired
JdbcTemplate jdbcTemplate;
至于CRUD代码这里就不再概述了,本篇文章主要探究Springboot集成jdbc自动配置原理。不管学什么框架都不是学会配置,更重要的是思想!
如果本文对你有一点点帮助,那么请点个赞呗,谢谢~
最后,若有不足或者不正之处,欢迎指正批评,感激不尽!如果有疑问欢迎留言,绝对第一时间回复!
欢迎各位关注我的公众号,里面有一些java学习资料和一大波java电子书籍,比如说周志明老师的深入java虚拟机、java编程思想、核心技术卷、大话设计模式、java并发编程实战.....都是java的圣经,不说了快上Tomcat车,咋们走!最主要的是一起探讨技术,向往技术,追求技术,说好了来了就是盆友喔...

SpringBoot 2.X集成 jdbc自动配置原理探究的更多相关文章
- springboot(八) 嵌入式Servlet容器自动配置原理和容器启动原理
1.嵌入式Servlet容器自动配置原理 1.1 在spring-boot-autoconfigure-1.5.9.RELEASE.jar => springboot自动配置依赖 jar包下,E ...
- SpringBoot:配置文件及自动配置原理
西部开源-秦疆老师:基于SpringBoot 2.1.6 的博客教程 秦老师交流Q群号: 664386224 未授权禁止转载!编辑不易 , 转发请注明出处!防君子不防小人,共勉! SpringBoot ...
- SpringBoot入门一:基础知识(环境搭建、注解说明、创建对象方法、注入方式、集成jsp/Thymeleaf、logback日志、全局热部署、文件上传/下载、拦截器、自动配置原理等)
SpringBoot设计目的是用来简化Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.通过这种方式,SpringBoot致力于在蓬勃发 ...
- SpringBoot自动配置原理学习
介绍 构建Springboot项目时我们会创建一个启动类 @SpringBootApplication public class DemoApplication { public static voi ...
- springboot核心技术(二)-----自动配置原理、日志
自动配置原理 配置文件能配置的属性参照 1.自动配置原理: 1).SpringBoot启动的时候加载主配置类,开启了自动配置功能 @EnableAutoConfiguration 2).@Enable ...
- 面试题: SpringBoot 的自动配置原理
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 3.Spring Boot 的自动配置原理 package com.mmall; import org. ...
- SpringBoot自动配置原理
前言 只有光头才能变强. 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 回顾前面Spring的文章(以学习的顺序排好): S ...
- SpringBoot的自动配置原理过程解析
SpringBoot的最大好处就是实现了大部分的自动配置,使得开发者可以更多的关注于业务开发,避免繁琐的业务开发,但是SpringBoot如此好用的 自动注解过程着实让人忍不住的去了解一番,因为本文的 ...
- 3. SpringBoot ——自动配置原理浅析
SpringBoot的功能之所以强大,离不开它的自动配置这一大特色.但估计很多人只是知其然而不知其所以然.下面本人对自动配置原理做一个分析: 在使用SpringBoot时我们通过引入不同的Starte ...
随机推荐
- E. Remainder Problem 分块
两个操作 1对x位置的a[x]+y 2对所有i=y(mod x)求a[i]的和 我们肯定不能n^2 跑,稳超时,但是我们可以这样分块考虑. 为什么n^2不行?因为在x比较小的时候,这个求和操作次数太多 ...
- 让 AE 输出 MPEG
最近在做视频后期处理,但是我发现 AE 的文件都很大,大概一个 10 分钟视频 10G ,所以有什么办法让他输出的文件变小?一个方法是使用 MPEG 输出. 本文告诉大家如何让 AE 输出 MPEG ...
- QQ 第三方登录
- oracle 使用显式的游标(CURSORs)
使用隐式的游标,将会执行两次操作. 第一次检索记录, 第二次检查TOO MANY ROWS 这个exception . 而显式游标不执行第二次操作.
- mosquitto/openssl 在RK3288上的编译以及MQTT客户端的代码示例
1,依赖库openssl 的交叉编译 (1)配置编译器信息 setarch i386 ./config no-asm shared --cross-compile-prefix=arm-linux-a ...
- Laravel 修改默认日志文件名称和位置
修改默认日志位置 我们平常的开发中可能一直把laravel的日志文件放在默认位置不会有什么影响,但如果我们的项目上线时是全量部署,每次部署都是git中最新的代码,那这个时候每次都会清空我们的日志,显示 ...
- PHP利用纯真IP数据库在本地实现IP地址信息查询
https://blog.csdn.net/myweishanli/article/details/45098693 准备工作: 建议本地IP地址数据库,请到http://www.cz88.net/这 ...
- 命名实体识别视频51cto
https://edu.51cto.com/center/course/lesson/index?id=402918 https://edu.51cto.com/course/18466.html
- 2013年NOIP普及组复赛题解
题目涉及算法: 计数问题:枚举: 表达式求值:栈: 小朋友的数字:动态规划: 车站分级:最长路. 计数问题 题目链接:https://www.luogu.org/problem/P1980 因为数据量 ...
- PHP用正则批量替换Img中src内容,用正则表达式获取图片路径实现缩略图功能
PHP用正则批量替换Img中src内容,用正则表达式获取图片路径实现缩略图功能 网上很多正则表达式只能获取或者替换一个img的src内容,或者只能替换固定的字符串,要动态替换多个图片内容的试了几个小时 ...