背景
SpringBoot 项目,使用 Druid 自动装配的数据源,数据源的帐号密码配置加密后,如何完成数据源的装配呢?
druid-spring-boot-starter
虽然自带了加密配置,但是密钥也是配置的,如果需要用自定义的加密解密工具,如果不用自带的工具,怎么自定义实现加密数据源的装配呢?
本文从 DruidDataSourceAutoConfigure
类源码入手,仿造该类,自定义一个数据源注入配置,在真正注入 DruidDataSource
之前,对 druid 配置信息完成解密。
主要思考三个问题:
- 自定的
Configuration
类中的@Bean
注入一个DruidDataSource
,为什么比自动装配的时机早呢? - 如果自定义一个自动装配类, 包含
DataSourceProperties
属性,对它的帐号密码解密后,让它在DruidDataSourceAutoConfigure
类之前装配,怎么实现呢? - 自动装配类的工作原理是什么?注入优先级怎么确定的?
加密数据源自主实现流程
Not registered via @EnableConfigurationProperties,
marked as Spring component,
or scanned via @ConfigurationPropertiesScan
复制代码
@ConfigurationProperties
用法限制,我想到一个解决办法,为当前类加上 @Component
,同时制定一个不可能的注入条件:@ConditionalOnProperty(prefix = "xx",name = "xxx", havingValue = "impossible")
。
不用官方的加密插件,自定义 Druid 的解密配置,我想到的方法是完全仿照 Druid 数据源的自动装配过程