dynamic-datasource detect druid publicKey,It is highly recommended that you use the built-in encryption method
使用druid-spring-boot-starter 1.2.11作為數據庫連接池 + dynamic-datasource-spring-boot-starter 3.4.1作為多數據源支持,并且使用了druid的數據庫密鑰加密功能,啟動項目發現日志中有如下日志:
[2024-10-31 15:42:55.343] - [INFO ] - [15336] - [240E04791E60243BB7BE00FEE00CC8F33BE822D8CFE09DDE00D10000] - [main] - [c.b.d.d.s.b.a.d.DruidConfig-255] - dynamic-datasource detect druid publicKey,It is highly recommended that you use the built-in encryption method
https://dynamic-datasource.com/guide/advance/Encode.html
yml中數據源的配置信息為:
spring:
datasource:
# 多數據源配置
dynamic:
primary: db1
strict: true
datasource:
# 第一個數據源
db1:
url: jdbc:mysql://localhost:3306/db1?...
username: root
password: xxx
druid:
...
min-evictable-idle-time-millis: 300000
max-evictable-idle-time-millis: 300000
# 公鑰
public-key: xxx
# 第二個數據源
db2:
url: jdbc:mysql://localhost:3306/db2?...
username: root
password: xxx
druid:
...
min-evictable-idle-time-millis: 300000
max-evictable-idle-time-millis: 300000
# 公鑰
public-key: xxx
根據日志在com.baomidou.dynamic.datasource.spring.boot.autoconfigure.druid.DruidConfig類中定位到了日志輸出位置,這個類是druid數據庫連接池的配置類,
Properties connectProperties = connectionProperties == null ? g.getConnectionProperties() : connectionProperties;
if (publicKey != null && publicKey.length() > 0) {
if (connectProperties == null) {
connectProperties = new Properties();
}
log.info("dynamic-datasource detect druid publicKey,It is highly recommended that you use the built-in encryption method \n " +
"https://dynamic-datasource.com/guide/advance/Encode.html");
connectProperties.setProperty("config.decrypt", "true");
connectProperties.setProperty("config.decrypt.key", publicKey);
}
this.connectionProperties = connectProperties;
發現如果druid的公鑰配置在publicKey下就會觸發日志輸出,并且會設置兩個配置屬性到connectProperties中,一個是config.decrypt,一個是config.decrypt.key。
修改yml中的配置,不在publicKey下配置公鑰,而是配置到connectionProperties下:
spring:
datasource:
# 多數據源配置
dynamic:
primary: db1
strict: true
datasource:
# 第一個數據源
db1:
url: jdbc:mysql://localhost:3306/db1?...
username: root
password: xxx
druid:
...
min-evictable-idle-time-millis: 300000
max-evictable-idle-time-millis: 300000
# 公鑰
connection-properties:
"config.decrypt": "true"
"config.decrypt.key": xxx
# 第二個數據源
db2:
url: jdbc:mysql://localhost:3306/db2?...
username: root
password: xxx
druid:
...
min-evictable-idle-time-millis: 300000
max-evictable-idle-time-millis: 300000
# 公鑰
connection-properties:
"config.decrypt": "true"
"config.decrypt.key": xxx
啟動項目發現數據庫連接失?。?/p>
Caused by: java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
再次在DruidConfig類中查看publicKey使用到的位置,發現:
//filters單獨處理,默認了stat,wall
String filters = this.filters == null ? g.getFilters() : this.filters;
if (filters == null) {
filters = "stat";
}
if (publicKey != null && publicKey.length() > 0 && !filters.contains("config")) {
filters += ",config";
}
properties.setProperty(FILTERS, filters);
原來還需要設置druid的filters屬性,修改yml中的配置為:
spring:
datasource:
# 多數據源配置
dynamic:
primary: db1
strict: true
datasource:
# 第一個數據源
db1:
url: jdbc:mysql://localhost:3306/db1?...
username: root
password: xxx
druid:
...
min-evictable-idle-time-millis: 300000
max-evictable-idle-time-millis: 300000
filters: "stat,config"
# 公鑰
connection-properties:
"config.decrypt": "true"
"config.decrypt.key": xxx
# 第二個數據源
db2:
url: jdbc:mysql://localhost:3306/db2?...
username: root
password: xxx
druid:
...
min-evictable-idle-time-millis: 300000
max-evictable-idle-time-millis: 300000
filters: "stat,config"
# 公鑰
connection-properties:
"config.decrypt": "true"
"config.decrypt.key": xxx
再次啟動項目,成功啟動且沒有再出現dynamic-datasource detect druid publicKey,It is highly recommended that you use the built-in encryption method日志。
本文來自博客園,作者:杜勁松,轉載請注明原文鏈接:http://www.rzrgm.cn/imadc/p/18517970

浙公網安備 33010602011771號