如何重写Hikari线程池yaml中的配置

107 阅读2分钟

一、前言

之前的公司接触的基本都是业务方面的代码,很少会对源码进行重写。进入新公司后,跟着一个大佬同事学到了一项新技能,在此记录一下。

需求是我需要对yaml文件中的关键敏感信息进行加密,我们这引入了 jasypt 加密工具。

二、引入加密工具

<!-- 敏感信息进行加密-->
<dependency>
    <groupId>com.github.ulisesbocchio</groupId>
    <artifactId>jasypt-spring-boot-starter</artifactId>
    <version>3.0.5</version>
</dependency>

因为我们用shardingsphere进行了分表,所以涉及到两个配置文件,application.yml (spring-boot配置文件) 与sharding-dev.yml (sharding-sphere分表配置文件)

三、重写源码的不同场景

1. 重写以覆盖原始行为

  • 包名需要一致: 如果你希望通过重写类来替换 Spring Boot 或依赖库中的某个类的默认行为,那么你需要将你的类的包名和类名与原始类保持完全一致。
    Spring Boot 会优先加载你定义的类,而不是加载依赖中的原始类。

    例如:

    package org.springframework.boot.autoconfigure;
    
    public class MyCustomAutoConfiguration {
        // 重写逻辑
    }
    
  • 适用场景:

    • 修改默认配置类。
    • 覆盖某些工具类的逻辑

2. 重写以扩展功能(非覆盖原始类)

  • 包名可以不同: 如果你只是想扩展功能,而不是替换原始类的行为,则可以使用不同的包名。这种方式更安全,也不容易引起兼容性问题。

    例如,创建自定义的工具类或组件:

    复制代码
    package com.example.custom;
    
    public class MyCustomUtility {
        // 自定义功能
    }
    
  • 适用场景:

    • 增加自定义功能,而不修改原始类。
    • 避免与原始类冲突。

3. 注意事项

  • 类加载顺序:如果重写的类与原始类同名且同包,Spring Boot 项目启动时可能会优先加载你的类。确保测试充分,以避免意外行为。
  • 源码维护:重写源码可能导致未来依赖升级时出现兼容性问题。如果可以,优先通过继承、装饰器模式或其他方式实现扩展。
  • 依赖关系:检查 Maven/Gradle 的依赖优先级,确保你的类被加载,而不是原始类。

四、重写HikariConfig

接下来的关键,重写hikari的配置HikariConfig

适用场景:

  • 修改默认配置类。
  • 覆盖某些工具类的逻辑。
public class HikariConfig implements HikariConfigMXBean
{
    // 自定义参数
    private Properties myDataSourceProperties;
    
    // 设置自定义参数
    public void setMyDataSourceProperties(Properties myDataSourceProperties) {
        this.myDataSourceProperties = myDataSourceProperties;
        // 进行密码解密
        // 解密逻辑
        // ....
        this.setPassword(password);
    }

}

以上结束。

总结:关键是要有追踪源码的能力,这也是以后需要提升的地方。