67、SpringBoot --> 数据源配置 及 配置多个数据源--C3P0 数据源 和 Hikari 数据源

SpringBoot --> 数据源配置 及 配置多个数据源–C3P0 数据源 和 Hikari 数据源


Spring Boot 如何选择 DataSource 数据源

优先级从高到低: HikariCP > Tomcat pooling DataSource > Commons DBCP2

如果要使用Tomcat pooling DataSource这种池化数据源,那么可以用</ exclusions >这个把HikariCP 排除掉,然后springboot就会自动去使用Tomcat pooling DataSource

Spring Boot 的 spring-data-starter-jdbc 默认就自带了 HikariCP 的JAR包。

如果你不指定任何额外信息,Spring Boot默认会为我们创建HikariCP 的数据源。

这样移除这个HikariCP
在这里插入图片描述


数据源相关配置

数据源的通用配置以 spring.datasource.* 开头的属性进行配置。

spring.datasource.* 开头的属性由 DataSourceProperties类 负责加载、处理。

如果想对特定数据源实现增加配置,可通过特定前缀的属性进行配置,例如:

spring.datasource.hikari.*:专门配置HikariCP的属性。

spring.datasource.tomcat.*:专门配置Tomcat池化数据源的属性。

spring.datasource.dbcp2.*:专门配置DBCP2数据源的属性。

@ConfigurationProperties可修饰类,将该类变成属性处理类。

@ConfigurationProperties还可修饰 @Bean 配置 Bean组件,此时该注解读取的配置文件中的每个属性都会调用该Bean的一个setter方法。

比如在配置文件中读到一个abc属性,它就会尝试调用配置Bean的setAbc()方法


配置第三方数据源(C3P0)

首先需要排除HikariCP依赖库,还要添加C3P0的依赖

简单配置方式,只要一行(不能定制,早期版本才支持,Spring Boot 2.4开始不再支持):

spring.datasource.type=com.mchange.v2.c3p0.ComboPooledDataSource

复杂配置(用自定义的数据源代替自动配置的数据源)

1、先在容器中用@Bean配置一个C3P0数据源

2、然后用@ConfigurationProperties读取配置属性来对C3P0数据源进行配置


代码演示:配置第三方数据源(比如配置 C3P0 数据源)

在配置文件中写了对应的属性,在配置类中用@ConfigurationProperties读取。
这样就完成了对 C3P0 数据源的配置:
在这里插入图片描述


运行代码,成功查询到数据库的数据,表示这个 C3P0 数据源 配置的没有问题
代码是延用上一篇文章提及的spring data jpa 的 crud 。
其他代码在上一篇 --> 66、Spring Data JPA 的基本功能–CRUD 和 分页 – 可获取
在这里插入图片描述


关于在配置文件中的写法及其写法来源:
1、首先是前缀,在配置类中的bean组件上面添加这个@ConfigurationProperties(“cn.ljh.datasource”),这个bean组件就会去配置文件中读取有这个cn.ljh.datasource开头的属性,如图
在这里插入图片描述


2、关于 cn.ljh.datasource.xxx.xxx,这个 xxx 是怎么来的
可以通过 C3P0的jar包中的类得来的。
具体的各种数据源的配置的写法,都是根据这个类里面的 setter 方法得来的,不是乱写的。
都是固定的。
在这里插入图片描述


也可以这么找
在这里插入图片描述


如图:配置文件中的属性的写法,都是在类中有对应的set方法
在这里插入图片描述


3、关于为什么 cn.ljh.datasource.driver-class 是 driver-class 这个写法
因为配置类中的bean组件的这个@ConfigurationProperties(“cn.ljh.datasource”),该注解读取的每个属性都会调用该Bean的一个setter方法。
比如在配置文件中读到一个【cn.ljh.datasource.initial-pool-size=3】的属性,它就会尝试调用配置bean 的 setInitialPoolSize() 方法。
也就是调用AbstractComboPooledDataSource类中的 setInitialPoolSize() 方法。(这句不知道对不对)

比如:setInitialPoolSize ,写在配置文件中,set 去掉,首字母小写,大写的字母改成小写,然后用 - 隔开,就变成 initial-pool-size


配置多个数据源

可在容器中用@Bean配置多个数据源。

如果希望Spring Boot能依赖注入某个数据源,可用 @Primary 注解修饰它。
——@Primary 注解 修饰的数据源将作为整个应用默认的数据源。

【注意:】如果你要配置多个数据源,必须自己显式地在容器中配置多个。

不可能说你配置一个,Spring Boot帮你自动配置一个,这是不可能的。

Spring Boot自动配置的DataSource Bean有一个@ConditionalOnMissingBean(DataSource.class)。


代码演示:配置多个数据源

上面已经配置了一个 C3P0 的数据源,再配一个 Hikari 的数据源


配置类中的 Datasource Bean

在这里插入图片描述


配置文件:

在这里插入图片描述


写法来源跟第一个一样

可以在jar包找,也可以直接点 HikariDataSource 类进去查看相应的setter方法

在这里插入图片描述


可在容器中用@Bean配置多个数据源。

如果希望Spring Boot能依赖注入某个数据源,可用 @Primary 注解修饰它。
——@Primary 注解 修饰的数据源将作为整个应用默认的数据源。

【注意:】,如果你要配置多个数据源,必须自己显式地在容器中配置多个。不可能说你配置一个,Spring Boot帮你自动配置一个,这是不可能的。
Spring Boot自动配置的DataSource Bean有一个@ConditionalOnMissingBean(DataSource.class)。


@Primary

有多个数据源,但是以哪个为主,就可以通过@Primary这个注解来指定

比如指定 C3P0 这个数据源。
其对应的数据是有数据的。
测试一下

在这里插入图片描述


@Primary 注解 修饰这个 Hikari 数据源 作为整个应用默认的数据源。
测试正确,因为这个 Hikari 数据源对应的数据库什么数据都没有
在这里插入图片描述


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_L_J_H_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值