前言:
运维和DBA都不希望把密码明文直接写在配置文件中,Druid提供了数据库密码加密的功能。
我在使用Springboot整合Quartz的时候使用了Druid数据源(Springboot整合Quartz集群部署以及配置Druid数据源),本案例就使用那个案例作为基础,其实数据库连接密码加密跟Quartz无关,只是我懒,只修改Druid部分。
开始:
1、以前项目本来就有Druid依赖,新建一个数据源配置类
@Configuration
public class DruidConfig {
@Value("${spring.datasource.publicKey}")
private String publicKey;
@Bean
@ConfigurationProperties(prefix = "spring.datasource")
public DruidDataSource dataSource() throws SQLException {
DruidDataSource druidDataSource = new DruidDataSource();
druidDataSource.setFilters("config");
druidDataSource.setConnectionProperties("config.decrypt=true;config.decrypt.key=" + publicKey);
return druidDataSource;
}
}
2、修改application.yml,复制3生成的publicKey,password粘贴到对应位置就行了。明文密码+私钥(privateKey)加密=加密密码,加密密码+公钥(publicKey)解密=明文密码,所以这里配置的是公钥+加密密码。
3、执行命令加密数据库密码
在命令行中执行如下命令:
java -cp druid-1.0.16.jar com.alibaba.druid.filter.config.ConfigTools you_password
输出
privateKey:MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAp86FJOR1EMZgiaR6CPX1JNoVMZlBXPf0glHh7YVNbFRQN62HQL4O5R9iFc0GHmiAC5rro2ikbq5+P8MCnQfa6wIDAQABAkEAgFGhaOO2TTyVZ5pFdMi95emZijrdquyGxp6wUu5AgWjUsoH5VI2boQIhANtTXi5HEGwzchfFt+l54khPpM3fV5+8gz4JVgcI80OxAiEAw93Kb4h2jL2U6qA9M7PP8lZ/ukzKfdmflJqyfyOFO1sCIH3Likg2wEefFkBmSf7ixpO9AoSGJkbbImvcYFGtruPn+HYji1BGJj5GpwIgT1rfMC94AnAr118Mtx4WY2UvfHKcNq0Rua4fkS+6hao=
publicKey:MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKfOhSTkdRDGYImkegj19STaFTGZQVz39IJR4e2FTWxUUDeth0C+DuUfYhXNBh5ogAua66NopG6ufj/DAp0H2usCAwEAAQ==
password:gIceJnrkgAUSX0WiGa0Td8DsLqaw4P6gmgjKR6iD5otJctCWVs/HgfgcshuCt9Bu8x6baiEcrU23M2W+1tzhOw==
输入你的数据库密码,输出的是加密后的结果。
4、然后启动测试,查看Quartz连接到了数据库,定时任务开始执行了。
参考:https://github.com/alibaba/druid/wiki/%E4%BD%BF%E7%94%A8ConfigFilter