spring boot(12)-数据源配置原理
来源:互联网 发布:网络代理打鱼怎么判 编辑:程序博客网 时间:2024/05/21 09:24
本篇讲的不仅是数据源配置,这也是spring boot实现自动配置的一部分。要理解数据源的配置原理,首先要理解第十篇tomcat连接池的配置
数据源配置源码
这里截取org.springframework.boot.autoconfigure.jdbc.DataSourceConfiguration的部分源码,中文注释都是我加的,主要介绍Tomcat和Hikari连接池如何自动配置切换,其他数据源配置也是一样的原理
abstract class DataSourceConfiguration { //省略其他源码//Tomcat数据源配置//如果当前环境中加载了括号里面的class,注解条件成立,系统将会加载被注解的内容 @ConditionalOnClass(org.apache.tomcat.jdbc.pool.DataSource.class) //如果在properties中配置了spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSource 条件成立 //matchIfMissing = true指如果没有配置这个参数,默认条件仍然成立 @ConditionalOnProperty(name = "spring.datasource.type", havingValue = "org.apache.tomcat.jdbc.pool.DataSource", matchIfMissing = true) //上面两个条件都成立时,系统会加载Tomcat数据源配置 static class Tomcat extends DataSourceConfiguration { //将方法返回的bean 注入spring @Bean //将properties文件中以spring.datasource.tomcat开头的属性值注入到方法返回的bean(tomcat连接池) @ConfigurationProperties(prefix = "spring.datasource.tomcat") public org.apache.tomcat.jdbc.pool.DataSource dataSource(DataSourceProperties properties) { //创建tomcat数据源作为方法返回值,源码省略 } } //Hikari数据源配置,注解意思同上 @ConditionalOnClass(HikariDataSource.class) @ConditionalOnProperty(name = "spring.datasource.type", havingValue = "com.zaxxer.hikari.HikariDataSource", matchIfMissing = true) static class Hikari extends DataSourceConfiguration { @Bean @ConfigurationProperties(prefix = "spring.datasource.hikari") public HikariDataSource dataSource(DataSourceProperties properties) { //创建Hikari数据源作为方法返回值,源码省略 } } //省略其他源码
默认tomcat连接池
只要在spring boot中添加了jdbc组件,就会自动加载tomcat连接池的class。所以从以上源码可以看出,只要有jdbc组件,默认会配置tomcat连接池。
配置Hikari连接池
第十篇说过Hikari是当前最好的连接池,可以参考官方测试数据。从源码可以看出,在spring boot默认连接池中,tomcat排在第一位置,第二个就是Hikari,其中的注解和tomcat连接池是一样的,只要理解了tomcat的配置就可以理解 如何配置Hikari,需要改两个地方。
1. spring boot默认没有Hikari的class,需要在pom.xml中添加依赖,Hikari的第一个注解条件才会成立
<dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId></dependency>2. application.properties中作以下配置,会造成tomcat连接池第二个注解条件不成立,并使Hikari的第二个注解条件成立
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
另外:如果不配置上一行,默认tomcat和Hikari条件都成立,在前面注入tomcat以后,系统已经有了连接池,就不会再注入后面的Hikari了。此时在jdbc组件中排除tomcat的class,也可以使tomcat的第一个注解条件不成立,如下
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> <exclusions> <exclusion> <artifactId>tomcat-jdbc</artifactId> <groupId>org.apache.tomcat</groupId> </exclusion> </exclusions> </dependency>
druid
druid连接池可能在国外不流行,在spring boot中并没有其相关源码。不过上篇讲过,只要添加了druid组件依赖,会优先配置druid连接池,就不会再加载本篇的所有配置,这是在druid组件中自动实现的。
查看当前数据库
查看当前数据库
如果要验证当前运行时的数据源到底是哪一个,可以在控制层用以下方法查看
@Autowiredjavax.sql.DataSource dataSource;@RequestMapping("/")public void test() {System.out.println(dataSource.getClass());}
阅读全文
1 0
- spring boot(12)-数据源配置原理
- spring boot(12)-数据源配置原理
- spring boot 配置druid数据源
- Spring Boot 配置Druid数据源
- spring boot 动态数据源配置
- spring-boot jpa 配置两个数据源
- Spring boot 数据源未配置异常
- Spring Boot+Mybatis动态数据源配置
- Spring Boot入门教程-数据源外部配置
- spring boot自动化配置原理
- Spring Boot使用Druid数据源配置和监控配置
- spring boot之多数据源
- Spring Boot中Datasource配置(Spring Boot dbcp2数据源配置)
- spring boot 配置单数据源和多controller问题
- Spring Boot-配置MongoDB、关系性数据库数据源
- Spring Boot + Mybatis多数据源和动态数据源配置
- Spring-Boot初学之配置文件application.properties(数据源配置)
- Spring Boot + Mybatis多数据源和动态数据源配置
- leetcode 28. Implement strStr()
- jQuery和javascript获取临近节点方法
- hdu 1507 Uncle Tom's Inherited Land*(奇偶建图+最大匹配)
- leetcode--32. Longest Valid Parentheses
- tensorflow/word2evc初步认识
- spring boot(12)-数据源配置原理
- HDU4008 Parent and son
- AR 恐龙博物馆三(萌宠小恐成长日记之蹒跚学步)
- PAT B1020.月饼
- zTree将树多节点转换成数组
- 使用(oracle)sql语句采集数据时,数据之间的分割符号要设置成数据中没有的
- 定时任务,AlarmManager使用
- Stones(HDU
- 运用二进制生成集合的所有子集