Springboot + dynamic + druild 配置动态数据源 数据库密码加密教程

项目搭建

Springboot: 2.7.14
Mybatis Plus: 3.5.3.1
druid: 1.2.14
引入依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
            <version>${dynamic-datasource-spring-boot-starter.version}</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>${druid-spring-boot-starter.version}</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>${mybatis-plus.version}</version>
        </dependency>

写一个密钥生成测试类

import com.alibaba.druid.filter.config.ConfigTools;
import org.junit.jupiter.api.Test;

import java.util.UUID;

public class EncryptedTest {

    public static final String PASSWORD;

    static {
    	// 这里修改成加密前的原始密码
        PASSWORD = UUID.randomUUID().toString();
    }

    /**
     * 密码加密
     */
    @Test
    public void druidPasswordEncryptedTest() throws Exception {

        String[] encryptedPasswordAndPublicKey = ConfigTools.genKeyPair(512);
        String publicKey = encryptedPasswordAndPublicKey[0];
        String privateKey = encryptedPasswordAndPublicKey[1];


        // 使用公钥加密密码
        String encryptedPassword = ConfigTools.encrypt(publicKey, PASSWORD);

        // 原始密码
        System.out.println("rawPassword: " + PASSWORD);

        System.out.println("encryptedPassword: " + encryptedPassword);
        System.out.println("privateKey: " + privateKey);
        System.out.println("publicKey: " + publicKey);

    }
}

运行测试用例,获取公私钥:
在这里插入图片描述

application.yml 配置

spring:
  datasource:
    dynamic:
      # 主数据源
      primary: master
      datasource:
        master:
          type: com.alibaba.druid.pool.DruidDataSource
          driver-class-name: org.postgresql.Driver
          url: jdbc:postgresql://localhost:5432/demo01
          username: root
          password: ENC(${datasource.master.encryptedPassword})
          public-key: ${datasource.master.privateKey}
          druid:
            filters: stat,wall,slf4j
            max-active: 100
            initial-size: 1
            max-wait: 60000
            min-idle: 1
            validation-query: select 1
        slave01:
          type: com.alibaba.druid.pool.DruidDataSource
          driver-class-name: org.postgresql.Driver
          url: jdbc:postgresql://localhost:5432/demo02
          username: root
          password: ENC(${datasource.slave01.encryptedPassword})
          public-key: ${datasource.slave01.privateKey}
          druid:
            filters: stat,wall,slf4j
            max-active: 100
            initial-size: 1
            max-wait: 60000
            min-idle: 1
            validation-query: select 1

datasource:
  master:
    # 填写生成的加密密码
    encryptedPassword: IsJkMEr9vWsjn9GdEjHIu3JZbTTFvQ7z74Tznn0oi4XtEiguOwf9bUn869Ku9dZP6BdD+jVBDYX4gGQCO99GZQ==
    privateKey: MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKTnmr1JLjUcAu3nSzL29aA/izsu2mlktQzFejTzz5lTv0J9dwPoNfRINP7PUzwp16dPVy4lgM3LLhOYdvV16ecCAwEAAQ==
  slave01:
    encryptedPassword: IsJkMEr9vWsjn9GdEjHIu3JZbTTFvQ7z74Tznn0oi4XtEiguOwf9bUn869Ku9dZP6BdD+jVBDYX4gGQCO99GZQ==
    privateKey: MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKTnmr1JLjUcAu3nSzL29aA/izsu2mlktQzFejTzz5lTv0J9dwPoNfRINP7PUzwp16dPVy4lgM3LLhOYdvV16ecCAwEAAQ==

如何使用

使用 @DS(value = “slave01”) 切换数据源

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,下面我来详细介绍一下 SpringBoot+Dynamic数据源动态切换的实现方法。 1. 添加依赖 在 pom.xml 文件中添加以下依赖: ```xml <!-- MyBatis Plus --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.2</version> </dependency> <!-- Druid 数据源 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.2.6</version> </dependency> <!-- Dynamic DataSource --> <dependency> <groupId>com.baomidou</groupId> <artifactId>dynamic-datasource-spring-boot-starter</artifactId> <version>2.5.3</version> </dependency> ``` 2. 配置数据源 在 application.yml 文件中配置数据源信息: ```yaml spring: datasource: druid: driver-class-name: com.mysql.jdbc.Driver initial-size: 5 max-active: 10 min-idle: 3 filters: stat,wall,slf4j # 主数据源 master: url: jdbc:mysql://localhost:3306/db_master?useUnicode=true&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC username: root password: 123456 # 从数据源 slave: url: jdbc:mysql://localhost:3306/db_slave?useUnicode=true&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC username: root password: 123456 ``` 3. 配置 DynamicDataSource 在 SpringBoot 启动类上添加 @EnableDynamicDataSource 注解,开启动态数据源功能: ```java @SpringBootApplication @EnableDynamicDataSource public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` 4. 配置 MyBatis Plus 在 MyBatis Plus 的配置文件中添加以下配置: ```java @Configuration @MapperScan("com.example.demo.mapper") public class MybatisPlusConfig { @Bean public PaginationInterceptor paginationInterceptor() { return new PaginationInterceptor(); } @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new DynamicTableNameInnerInterceptor(new TableNameParser() { @Override public String parse(String tableName) { // 根据业务需求动态返回表名 return tableName; } })); return interceptor; } } ``` 5. 编写动态数据源切换逻辑 在需要切换数据源的地方,通过 DynamicDataSourceContextHolder 切换数据源: ```java @Service public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Override public List<User> getUserList() { // 切换到从数据源 DynamicDataSourceContextHolder.setDataSourceKey("slave"); List<User> userList = userMapper.selectList(null); // 切换回主数据源 DynamicDataSourceContextHolder.setDataSourceKey("master"); return userList; } } ``` 6. 测试 启动 SpringBoot 项目,调用 getUserList 方法,查看控制台输出日志,可以看到动态切换数据源的日志信息。 以上就是 SpringBoot+Dynamic数据源动态切换的详细实现方法。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值