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

news/2024/7/23 9:35:49 标签: C3P0, DataSource, Hikari

DataSource_0">★ 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_34">★ 配置第三方数据源(C3P0

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

▲ 简单配置方式,只要一行(不能定制,早期版本才支持,Spring Boot 2.4开始不再支持):
spring.datasource.type=com.mchange.v2.c3p0.ComboPooledDataSource


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

(1)先在容器中用@Bean配置一个C3P0数据源
(2)然后用@ConfigurationProperties读取配置属性来对C3P0数据源进行配置

C3P0__51">代码演示:配置第三方数据源(比如配置 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 数据源对应的数据库什么数据都没有
在这里插入图片描述


http://www.niftyadmin.cn/n/5026550.html

相关文章

Calendar对象获取当前周的bug

项目场景&#xff1a; 双周项目管理&#xff0c;需要获取当前周为一年之中的第几周&#xff0c;原先的代码是用Calendar对象&#xff0c;先用setTime&#xff08;&#xff09;把当前时间传入&#xff0c;再用get&#xff08;3&#xff09;获取一年中的第几周 问题描述 实际发…

使用branch and bound分支定界算法选择UTXO

BnB算法原理 分支定界算法始终围绕着一颗搜索树进行的&#xff0c;我们将原问题看作搜索树的根节点&#xff0c;从这里出发&#xff0c;分支的含义就是将大的问题分割成小的问题。 大问题可以看成是搜索树的父节点&#xff0c;那么从大问题分割出来的小问题就是父节点的子节点…

C++模版基础

代码地址 gitgithub.com:CHENLitterWhite/CPPWheel.git 专栏介绍 本专栏会持续更新关于STL中的一些概念&#xff0c;会先带大家补充一些基本的概念&#xff0c;再慢慢去阅读STL源码中的需要用到的一些思想&#xff0c;有了一些基础之后&#xff0c;再手写一些STL代码。 (如果你…

做了五年功能测试麻木了,现在想进阶自动化测试该从哪里开始?

什么是自动化测试&#xff1f; 做测试好几年了&#xff0c;真正学习和实践自动化测试一年&#xff0c;自我感觉这一个年中收获许多。一直想动笔写一篇文章分享自动化测试实践中的一些经验。终于决定花点时间来做这件事儿。 首先理清自动化测试的概念&#xff0c;广义上来讲&…

如何使用 JavaScript/jQuery 为网站创建暗/亮模式?

深色模式对于任何网站都非常重要。不同兴趣的用户访问网站。有些人喜欢深色模式&#xff0c;有些人喜欢浅色模式。 根据一项调查&#xff0c;大约 70% 到 80% 的人喜欢深色模式&#xff0c;只有 20% 到 30% 的人喜欢浅色模式。因此&#xff0c;有必要为任何网站创建一个深色模…

classification_report

文章目录 classification_report混淆矩阵精确率(精准率)&#xff0c;召回率&#xff0c;F1值精确率召回率F1值精确率、召回率和F1值的应用 参考文献 classification_report 假设使用sklearn.metrics.classification_report生成的分类图像如下图所示&#xff1a; 列名&#xf…

C++之生成详细汇编代码(二百一十六)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

springboot集成excel导入导出

1、引入依赖 <dependency><groupId>com.pig4cloud.excel</groupId><artifactId>excel-spring-boot-starter</artifactId><version>1.2.7</version> </dependency> 2、导出 ResponseExcel(name "测试列表") Post…