项目搭建
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”) 切换数据源