Jdbc micronaut多数据源加密密码

Jdbc micronaut多数据源加密密码,jdbc,jdbctemplate,micronaut,Jdbc,Jdbctemplate,Micronaut,我创建了一个micronaut应用程序,可以通过jdbctemplate访问多个数据源。我对jdbctemplates进行了如下配置: @Factory @Requires(beans = DatasourceFactory.class) public class JdbcTemplateFactory { @Context @EachBean(DataSource.class) JdbcTemplate jdbcTemplate(DataSource dataSour

我创建了一个micronaut应用程序,可以通过jdbctemplate访问多个数据源。我对jdbctemplates进行了如下配置:

@Factory
@Requires(beans = DatasourceFactory.class)
public class JdbcTemplateFactory {

    @Context
    @EachBean(DataSource.class)
    JdbcTemplate jdbcTemplate(DataSource dataSource) {
        return new JdbcTemplate(dataSource);
    }
}
这使用
io.micronaut.configuration.jdbc.tomcat.DatasourceFactory
,它使用我的配置yml:

datasources:
  datasource111111:
    url: url
    username: username
    password: password
    driverClassName: org.h2.Driver
  datasource222222:
    url: url
    username: username
    password: password
    driverClassName: org.h2.Driver
问题是我想以某种方式解密来自配置的密码。我的第一次尝试是“替换”工厂正在使用的
DatasourceConfiguration
bean,但没有运气,它给了我一个没有意义的错误(io.micronaut.context.exceptions.DependencyInjectionException)

以下是我的替换尝试:

@Replaces(DatasourceConfiguration.class)
@EachProperty(value = BasicJdbcConfiguration.PREFIX, primary = "default")
public class EncryptedDatasourceConfiguration extends DatasourceConfiguration {
    public EncryptedDatasourceConfiguration(String name) {
        super(name);
    }

    @Override
    public String getPassword() {
        return "encrypted password";
    }
}
知道我做错了什么吗??谢谢

答复: 必须按照建议听bean创建

@Singleton
public class DatasourceInitiliazer implements BeanCreatedEventListener<DatasourceConfiguration> {
    @Override
    public DatasourceConfiguration onCreated(BeanCreatedEvent<DatasourceConfiguration> event) {
        final DatasourceConfiguration datasource = event.getBean();
        datasource.setPassword("encryptedPassword");
        return datasource;
    }
}
@Singleton
公共类DataSourceInitializer实现BeanCreatedEventListener{
@凌驾
已创建公共数据源配置(BeanCreatedEvent){
最终数据源配置datasource=event.getBean();
datasource.setPassword(“encryptedPassword”);
返回数据源;
}
}

您最好创建一个
BeanCreatedEventListener
,读取密码、解密密码并将其设置回配置中

酷!这很有效。我之所以需要它,不是因为我只是在解密密码,而是有没有办法获得bean的限定符?只是好奇是的,看到了吗