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

★ Spring Boot如何选择DataSource数据源

优先级从高到低: HikariCP > Tomcat pooling DataSource > Commons DBCP2
如果要使用Tomcat pooling DataSource这种池化数据源,
那么可以用</exclusions>这个把HikariCP 排除掉,然后springboot就会自动去使用Tomcat pooling DataSourceSpring 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 数据源对应的数据库什么数据都没有
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/132780.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

16. Docker容器监控CAdvisor+InfluxDB+Granfana

目录 1、前言 2、原始命令 3、CAdvisorInfluxDBGranfana 3.1、什么是CAdvisor 3.2、什么是Influxdb 3.3、什么是Granfana 4、安装使用 4.1、安装influxdb 4.2、安装CAdvisor 4.3、安装Granfana 4.4、访问Influxdb 4.5、创建CAdvisor数据库 4.6、访问CAdvisor 4.7…

评价模型:层次分析法

1. 模型建立 1.1 建立层次结构模型 在深入分析实际问题的基础上&#xff0c;将有关的各个因素按照不同属性自上而下地分解成若干层次&#xff0c;同一层的诸因素从属于上一层的因素或对上层因素有影响&#xff0c;同时又支配下一层的因素或受到下层因素的作用。最上层为目标层…

python集合

集合set set_python1.集合的创建2.集合的相关操作3.集合间的关系4.集合的数学操作5.集合生成式 set_python 集合(set)是一个可变的数据类型&#xff0c;它用于存储一组唯一的元素。集合中的元素是无序的&#xff0c;并且不能重复。可以使用大括号{}或者set()函数来创建一个集合…

C# OpenVino Yolov8 Pose 姿态识别

效果 项目 代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using OpenCvSharp;namespace OpenVino_Yolov8_Demo {public…

API原理概念篇(六)玩转正则表达式等常用API

一 玩转正则表达式等常用API ① 正则 1、openresty存在两套正则表达式规范1) lua自身独有的正则规范 备注&#xff1a;大约有5%&#xff5e;15%性能损耗损耗原因&#xff1a;表达式compile成pattern,并不会被缓存,每次都会被重新compile编译2) nginx的符合POSIX规范的PCR…

IJK源码分析-android篇

整个IJK播放器框架相较于原始ffplay.c播放器,在三处进行了抽象,分别是: (1)解码器配置初始化操作,对应的数据结构是: struct IJKFF_Pipeline {SDL_Class *opaque_class;IJKFF_Pipeline_Opaque *opaque;void (*func_destroy) (IJKFF_Pipe…

合宙Air724UG LuatOS-Air LVGL API控件-微调框 (Spinbox)

微调框 (Spinbox) 微调框用于数值调整&#xff0c;有时候我们希望获取一个用户输入的数值&#xff0c;但是又不希望弹出键盘&#xff0c;可以使用微调框。 示例代码 -- 回调函数 function spinbox_increment_event_cb(obj, event)if event lvgl.EVENT_SHORT_CLICKED thenlvg…

openssl websockets

1. HTTPS通信的C实现 - 知乎

fluent python part3 一等函数

第 5 章 一等函数 5.1 把函数视作对象 >>> def factorial(n): ... """return n!""" ... return 1 if n < 2 else n * factorial(n - 1) ... >>> factorial(42) 140500611775287989854314260624451156993638400000…

【物联网】简要介绍最小二乘法—C语言实现

最小二乘法是一种常用的数学方法&#xff0c;用于拟合数据和寻找最佳拟合曲线。它的目标是找到一个函数&#xff0c;使其在数据点上的误差平方和最小化。 文章目录 基本原理最小二乘法的求解应用举例使用C语言实现最小二乘法总结 基本原理 假设我们有一组数据点 ( x 1 , y 1 …

pandas读取一个 文件夹下所有excel文件

我这边有个需求&#xff0c;是要求汇总一个文件夹所有的excel文件&#xff0c; 其中有.xls和 .xlsx文件&#xff0c;同时还excel文件中的数据可能还不一致&#xff0c;会有表头数据不一样需要一起汇总。 首先先遍历子文件夹并读取Excel文件&#xff1a; 使用os库来遍历包含子文…

LeetCode 面试题 04.09. 二叉搜索树序列

文章目录 一、题目二、C# 题解 一、题目 从左向右遍历一个数组&#xff0c;通过不断将其中的元素插入树中可以逐步地生成一棵二叉搜索树。 给定一个由不同节点组成的二叉搜索树 root&#xff0c;输出所有可能生成此树的数组。 点击此处跳转题目。 示例 1: 输入: root [2,1,3]…

记录:移动设备软件开发(activity组件)

目录 前言Android简介和发展Android应用的基本组件介绍Activity组件Activity简介Activity的状态和生命周期 小结 前言 移动设备软件开发是指为智能手机、平板电脑等移动设备设计和开发应用程序的过程。移动设备软件开发涉及多种技术、平台和工具&#xff0c;例如Android、iOS、…

9.14号作业

仿照vector手动实现自己的myVector&#xff0c;最主要实现二倍扩容功能 有些功能&#xff0c;不会 #include <iostream>using namespace std; //创建vector类 class Vector { private:int *data;int size;int capacity; public://无参构造Vector(){}//拷贝构造Vector(c…

一个方法用js生成随机双色球、大乐透

代码如下&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><s…

002 Linux 权限

前言 本文将会向您介绍关于linux权限方面的内容&#xff0c;包括文件类型&#xff0c;如何切换用户、基本权限、粘滞位等等 Linux具体的用户 超级用户&#xff1a;可以再linux系统下做任何事情&#xff0c;不受限制 普通用户&#xff1a;在linux下做有限的事情。 超级用户的…

NDK (ndk)报错 Unity requires NDK r19 (64-bit)(19.0.05232133)

一、介绍 在 Android 添加 NDK ndk 的时候&#xff0c;出现 Unity requires NDK r19 (64-bit)(19.0.05232133)。 二、环境 1、Unity 2020.3.48f1c1 2、Android NDK 配置 三、报错信息 NDK (ndk)报错 Unity requires NDK r19 (64-bit)(19.0.05232133) 四、解决方法 1、下…

【力扣每日一题】2023.9.13 检查骑士巡视方案

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 题目给我们一个n*n大小的矩阵&#xff0c;矩阵的元素表示骑士已经行动的次数&#xff0c;问我们骑士能不能按照矩阵里元素顺序来巡视整个…

vue前后端分离单点登录,结合长token和短token进行登录

单点登录背景 在公司发展初期&#xff0c;公司拥有的系统不多&#xff0c;通常一个两个&#xff0c;每个系统都有自己的登录模块&#xff0c;运营人员每天用自己的账号登陆&#xff0c;很方便&#xff0c;但是&#xff0c;随着企业的发展&#xff0c;用到的系统随之增加&#x…

06-Redis缓存高可用集群

上一篇&#xff1a;05-Redis高可用集群之水平扩展 1.集群方案比较 哨兵模式 在redis3.0以前的版本要实现集群一般是借助哨兵sentinel工具来监控master节点的状态&#xff0c;如果master节点异常&#xff0c;则会做主从切换&#xff0c;将某一台slave作为master&#xff0c…