spring boot 2.1.X 学习之路——整合Durid,数据库加解密
pom.xml添加配置
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.18</version>
</dependency>
application.yml添加配置
具体配置项可以参照官方文档Druid配置
spring:
application:
name: system-service
datasource:
druid:
url: jdbc:mysql://localhost:3306/yml?serverTimezone=UTC
username: root
password: 123456
initial-size: 5
min-idle: 10
max-active: 20
max-wait: 60000
time-between-eviction-runs-millis: 2000
数据库加解密
运维和DBA都不希望把密码明文直接写在配置文件中,Druid提供了数据库密码加密的功能。
数据库密码加解密有两种方式,一种是druid自带的加密方式,还有一种是自定义配置时自定义加解密设置。
Druid自带加解密
druid加解密的工具类是ConfigTools类,首先获取Druid的jar包,并cmd至其目录下,比如我们需要加密的密码是123456,执行cmd命令
java -cp druid-1.0.16.jar com.alibaba.druid.filter.config.ConfigTools 123456
会获取到如下数据
privateKey:MIIBUwIBADANBgkqhkiG9w0BAQEFAASCAT0wggE5AgEAAkEAl/8EoDUqBF+NAZuM9mTkAuu3vHbfDuu8sF5fGhrEHiqFEyI4HHO86ouCOK2OrfBRkb5VpBLDEw7GmCnj4HworQIDAQABAkBWb5Kc3L7hL8lLMb8u218C/jNFfMAKhyqNjY09lh0THa6UuwmYrk2tGaq007Jcb53DWkBKv/XJleYQDuYhJlmBAiEA4fHuRVI3zJ3Lq3MJmRoYUn7TKGMnVzANdclxYZs23aECIQCsNusbhKGm7fD84nW+VhW7wFGvW+Kv8NrrpDc7vxa3jQIgZs+MSTTROSUwMPKmkmkCWj9lXAJKO20dItSn5+8VtyECIAZX54UV95ZcgVnvRYMDTL2jsd6RteHhL08qt1YeDcopAiA1q6t1ih9glg7qLuHk9hDG2vl4GBn7sRCYyRx8n35YhQ==
publicKey:MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJf/BKA1KgRfjQGbjPZk5ALrt7x23w7rvLBeXxoaxB4qhRMiOBxzvOqLgjitjq3wUZG+VaQSwxMOxpgp4+B8KK0CAwEAAQ==
password:iOrc1JxbtOcXzC9hO8mVsANHbFoDVEs+IsivYpvkVJ48H3XfEWYztk78CFZOxYMQUGLa5yBI5TJsHCllW533LQ==
privateKey :加密私钥
publicKey :加密公钥
password :加密后的密码
然后修改配置文件application.yml
public-key: MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJf/BKA1KgRfjQGbjPZk5ALrt7x23w7rvLBeXxoaxB4qhRMiOBxzvOqLgjitjq3wUZG+VaQSwxMOxpgp4+B8KK0CAwEAAQ==
spring:
datasource:
druid:
url: jdbc:mysql://localhost:3306/yml?serverTimezone=UTC
username: root
password: iOrc1JxbtOcXzC9hO8mVsANHbFoDVEs+IsivYpvkVJ48H3XfEWYztk78CFZOxYMQUGLa5yBI5TJsHCllW533LQ==
connection-properties: config.decrypt=true;config.decrypt.key=${public-key}
filter:
config:
enabled: true
- password修改成加密后的密文
- 新增
public-key
属性(名称可以自定义),值为密文的公钥publicKey
- 设置开启加密,并指定公钥,开启configFilter。配置如下(
${public-key}
要与 第二步中名称一致)
connection-properties: config.decrypt=true;config.decrypt.key=${public-key}
filter:
config:
enabled: true
运行:
自定义加解密规则
自定义加解密规则的方式就是需要自己实例化DataSource
@Configuration
public class BeansConfiguration {
@Value("${spring.datasource.druid.password})
private String password;
/**
* 配置项可以根据实际需要进行配置,此处只配置地址、用户、密码
* 各配置项的值可以自己随意配置key-value,也可以直接用默认的,获取的时候通过@Value注入进来
*/
@Bean("dataSource")
@Scope(ConfigurableListableBeanFactory.SCOPE_SINGLETON)
public DataSource getDataSource(){
System.out.println(name);
System.out.println("创建数据连接池");
DruidDataSource dataSource = DruidDataSourceBuilder.create().build();
dataSource.setUsername("root");
//在setPassword之前可以对密码进行自定义解密
dataSource.setPassword(password);
dataSource.setUrl("jdbc:mysql://localhost:3306/yml?serverTimezone=UTC");
System.out.println("数据连接池创建成功");
return dataSource;
}
}