一、问题描述
springboot集成druid配置多数据源情况下,数据库密码加密访问时会出现连接异常问题,具体报错如下:
二、问题分析
如果是单数据源的话druid是自带解密的,但是多数据源的情况下druid不会使用默认的加载方法,多数据源还是需要手动解密的。
通过断点调试,发现步骤三中的解决方案是靠谱有效,关键断点截图如下:
由此可分析自定义DruidPasswordCallback类密码解密后可实现重写password。
三、解决方案
Druid可以配置一个叫做passwordCallBack的参数,这个参数的值是一个全限定类名,这个类需要继承DruidPasswordCallback.java类,实现一个setProperties()方法,在这个方法里,可以将加密的密码通过Druid提供的ConfigTools.decrypt(publickey, password)方法进行解密,再通过DruidPasswordCallback.java类的父类PasswordCallback.java的setPassword()的方法赋值解密后的密码,再看上面图中1545行代码,password获得的值就是解密后的密码,请求连接数据库就没问题了。
四、关键解决步骤
1、自定义类继承