今天在整理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