在配置數據庫密碼加密時,參照網上資料修改了配置文件中關於filter部分,啓動項目報錯。
druid:
#就是它↓
filters: config,wall,stat
報錯信息:
java.lang.IllegalStateException: dbType not support : null, url
jdbc:p6spy:mysql://192.168.22.58:3306/english?autoReconnect=true&useSSL=false&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowMultiQueries=true
at com.alibaba.druid.wall.WallFilter.init(WallFilter.java:159)
~[druid-1.1.10.jar:1.1.10]
原因:
1.上面的配置方式,WallFilter沒有指定dbtype,WallFilter初始化時找不到匹配的dbType拋出異常。
2.dbType爲null的原因爲,項目中使用了P6Spy 框架,而且沒有顯示指定WallFilter的dbType。這一點在Druid文檔中有作說明。
在WallFilter初始化時,如果dbtype爲空,會根據jdbcURL獲取(下圖紅框方法),但是因爲配置了P6Spy ,Util裏面沒有jdbc:p6spy:mysql的匹配項,仍然返回null。
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.p6spy.engine.spy.P6SpyDriver
url: jdbc:p6spy:mysql://192.168.22.58:3306/english?autoReconnect=true&useSSL=false&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowMultiQueries=true
解決:
配置數據庫密碼加密根本不需要WallFilter和StatFilter,要解決這個問題,直接去掉配置文件中的stat和wall,或者爲wallfilter指定dbType。
public-key: MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAORbdAnZ/F9SwQ7REnScoKkDAQAPleBYkaLzTYCWxumG5Anc0PcQLKEDHLBqCFO3vwEAAQ==
druid:
filters: config
connection-properties: config.decrypt=true;config.decrypt.key=${public-key};
#其他配置省略
或者
druid:
filter:
config:
enabled: true
stat:
enabled: true
db-type: mysql
wall:
enabled: true
db-type: mysql
connection-properties: config.decrypt=true;config.decrypt.key=${public-key};
參考文檔:https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE-wallfilter
關於WallFilter dbType的配置說明: