在springboot中结合druid数据源,将数据库密码进行加密,使用druid的jar包中的工具类: com.alibaba.druid.filter.config.ConfigTools
1.生成加密密码:
java -cp druid-1.1.16.jar com.alibaba.druid.filter.config.ConfigTools 密码>aaa.txt
2.生成的aaa.txt中包含公钥、私钥和加密后的密码,复制公钥和加密后的密码到application.properties的配置文件
spring.datasource.type=com.hurricane.druid.datasource.DruidDataSourceWrapper
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/temp?useUnicode=true&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=VOwyMYHXa+lAnp6ZqjiJ0wwDa/lY9Dub6ndGvRz/Y8Ed8H+OOTLWZOKaZ7u/h3haex0/gw==
spring.datasource.druid.filters=config
spring.datasource.druid.connection-properties=config.decrypt=true;config.decrypt.key=MFwwDQYJKoZIhvcNAQEBBQAJBAIwAz21I0ndCW+nVfVc6mmpNsmfz4WPfEeWZAi8AwWIhA1GPKiu+1pYo15nZ5aUPqpxZWkX1IUlUdlfkgonf9gUCAwEAAQ==
关于使用配置filters和connection-properties,试了各种方式,最后还是参考源码注释来这样配置成功的,可以参考文件com.alibaba.druid.filter.config.ConfigFilter的源码注释。
密码解密:
public static void main(String[] args) throws Exception {
// String pwdString = ConfigTools.decrypt("MFwwDQKoZIhvcNAQEBBQADSwAwSAJBAJpO+exF8xADQjhkpb8vWo3aBoZnZpAtVl9g8KUVqg0MPBVeuRXR/SHewuaVZmlFkXaUe9FlBl6Qa9hOttBoUy0CAwEAAQ==", "UAzCvOJib6RSD8MQoC7xaLes2dtd+noAl5DzoD6JWU87UTQ0f3ltwuwWfl0O4xTspLDF6JZm4nTjjh0+v4iQ==");
// System.err.println(pwdString);
// String encrypt = ConfigTools.encrypt("abc");
// System.out.println(encrypt);
ConfigTools.main(new String[] {"abc"});
}
以上。
public static void main(String[] args) {
int i = 0;
for (;;) {
System.out.println(i++);
try {
System.out.println("before ex");
int j = 1 / 0;
} catch (Exception ex) {
if (i < 3) {
System.out.println("catch");
continue;
}
throw ex;
}
System.out.println(111);
}
}
1.用for(;;)代替while(true)有什么好处吗? 2.尝试操作次数用异常进行控制。
testOnBorrow是从数据源获取链接时,是否进行验证链接的可用性,testOnIdle是从数据源获取链接时,判断获取到的链接的空闲时间是否大于指定的值(timeBetweenEvictionRunsMillis),若大于则进行链接可用性的校验。因此testOnBorrow与testOnIdle没有必要同时使用true。
从数据源获取的链接默认是自动提交的。
参考:druid加密 springboot application.properties配置文件数据库密码加密_cshongye的专栏-CSDN博客