项目搭建

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”) 切换数据源

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐