今天在整理2013年的工作時的一個項目,修改了數據庫連接,初始化數據庫,部署運行報錯,主要原因是阿里巴巴druid報錯,導致DataSource初始化失敗。
druid報錯日志:
Caused by: java.lang.IllegalArgumentException: String length must be a multiple of four.
at com.alibaba.druid.util.Base64.base64ToByteArray(Base64.java:122)
at com.alibaba.druid.util.Base64.base64ToByteArray(Base64.java:107)
at com.alibaba.druid.filter.config.ConfigTools.decrypt(ConfigTools.java:150)
at com.alibaba.druid.filter.config.ConfigFilter.decrypt(ConfigFilter.java:197)
... 79 more
我想到可能的原因是:
1、jdk版本問題。
2、tomcat版本問題。
3、MySQL版本太新,導致mysql驅動和druid需要升級。
4、記錄數據庫連接信息的.properties文件編碼問題。
然后,我對可能的問題進行一一嘗試。發現問題未解決。
最后,我去仔細看了下spring配置文件里有關druid的配置。心中一萬個草泥馬。
<!-- 解密密碼必須要配置的項 --><property name="filters" value="config" /><property name="connectionProperties" value="config.decrypt=true" />
居然使用了druid的加解密功能。數據庫連接密碼是通過druid加密的,然后druid解密再訪問數據庫。怪不得報得錯誤是有關字符加解密編碼的錯誤。
當時修改數據庫配置信息的時候,心里想把密碼搞得那么復雜干嘛?當時就沒想到這是druid的加密。
https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98