使用 @Resource private DataSource dataSource
获取的数据源有问题,密码还是未解密的密码,但是在bean注入的时候是已经解密,使用的数据源是Hikari。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
根据您遇到的问题,即使用@Resource private DataSource dataSource
注入的数据源中密码仍为未解密状态,尽管在Bean配置时已进行了解密处理,并且使用的数据源是HikariCP。结合知识库资料,这里提供一些排查和解决的步骤:
确认解密逻辑位置: 确保密码解密逻辑是在Spring容器初始化数据源Bean之前执行的。通常,密码解密应该发生在读取配置文件并设置到数据源属性之前。检查是否在正确的位置(如Spring的@Configuration
类或自定义的BeanPostProcessor)应用了密码解密逻辑。
检查配置属性绑定: 确认您的配置文件(如application.properties或yaml)中数据库密码配置正确引用了解密后的值。如果使用的是加密的密码配置,确保有机制能在运行时将其转换为明文。
数据源Bean配置复审: 重新审视数据源Bean的定义,确保密码字段通过解密方法动态设置,而不是直接硬编码或从未解密的配置中获取。例如:
@Value("${spring.datasource.password}")
private String decryptedPassword;
@Bean
public DataSource dataSource() {
HikariDataSource hikariDataSource = new HikariDataSource();
hikariDataSource.setPassword(decryptedPassword); // 确保此处使用解密后的密码
// 其他配置...
return hikariDataSource;
}
日志分析: 检查应用启动日志,特别是与数据源初始化相关的部分,看是否有解密操作的日志输出,以及最终用于设置数据源的密码值是否正确。这有助于验证解密过程是否按预期工作。
环境变量与Profile检查: 确认没有其他环境变量或Spring Profile覆盖了您期望的解密密码配置。有时候,不同的运行环境或Profile可能会引入不同的配置来源,导致预期的解密逻辑未生效。
框架或库的特定行为: 虽然不常见,但某些情况下,框架或连接池库可能有其内部处理密码的方式,比如HikariCP对密码有特殊处理。查阅HikariCP的官方文档或社区讨论,确认是否存在已知问题或特定配置需求。
如果以上步骤均未能解决问题,建议详细审查密码解密逻辑的实现细节,并考虑增加更详细的日志记录点来跟踪解密前后的值变化,以便进一步定位问题所在。