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


    ★ Spring Boot如何选择DataSource数据源

    优先级从高到低: HikariCP > Tomcat pooling DataSource > Commons DBCP2
    如果要使用Tomcat pooling DataSource这种池化数据源,
    那么可以用这个把HikariCP 排除掉,然后springboot就会自动去使用Tomcat pooling DataSource
    
    
    Spring Boot 的 spring-data-starter-jdbc 默认就自带了 HikariCP 的JAR包。
    
    如果你不指定任何额外信息,Spring Boot默认会为我们创建HikariCP 的数据源。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    这样移除这个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()方法
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    ★ 配置第三方数据源(C3P0

    首先需要排除HikariCP依赖库,还要添加C3P0的依赖
    
    ▲ 简单配置方式,只要一行(不能定制,早期版本才支持,Spring Boot 2.4开始不再支持):
    spring.datasource.type=com.mchange.v2.c3p0.ComboPooledDataSource
    
    
    ▲ 复杂配置(用自定义的数据源代替自动配置的数据源)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    (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)。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

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

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

    配置类中的 Datasource Bean
    在这里插入图片描述

    配置文件:
    在这里插入图片描述

    写法来源跟第一个一样
    可以在jar包找,也可以直接点 HikariDataSource 类进去查看相应的setter方法
    在这里插入图片描述

    可在容器中用@Bean配置多个数据源。
    
    如果希望Spring Boot能依赖注入某个数据源,可用 @Primary 注解修饰它。
    ——@Primary 注解 修饰的数据源将作为整个应用默认的数据源。
    
    【注意:】,如果你要配置多个数据源,必须自己显式地在容器中配置多个。
                不可能说你配置一个,Spring Boot帮你自动配置一个,这是不可能的。
                Spring Boot自动配置的DataSource Bean有一个@ConditionalOnMissingBean(DataSource.class)。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    @Primary

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

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

    在这里插入图片描述

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

  • 相关阅读:
    2020 滴滴java面试笔试总结 (含面试题解析)
    任务长期不释放和占用单节点持续的cpu,导致hivesever2本身内存泄漏造成
    JSP out.println()方法具有什么功能呢?
    【Android - 技术期刊】第002期
    perl学习笔记(九)用正则表达式处理文本(2)
    14基于MATLAB的鲸鱼优化VMD参数,以熵值为适应度函数,对VMD参数惩罚因子和层数进行寻优,确定最优值并进行信号分解,程序已调通,可以直接运行。
    不就是Java吗之数组的定义和使用
    【设计模式】抽象工厂模式
    平芯微PW7014中文规格书
    05 【函数(上)】
  • 原文地址:https://blog.csdn.net/weixin_44411039/article/details/132877466