在SpringBoot Application中在密码轮换时刷新数据源



有人可以指导我,我如何刷新数据源每当密码为数据库旋转。基本上,我不希望任何手动步骤来刷新数据源(如调用任何端点)。而不是我可以轮询一个文件,看看DB凭据是否轮换使用FileWatcher服务。关于相同的问题,我已经在stackoverflow上阅读了一些解决方案。但我没能成功地实施它。因为我是新的stackoverflow不能评论别人的问题得到解决方案澄清。下面是创建连接池的简单类。

@ configuration

@EnableTransactionManagement

公共类jpacconfig {

@Value("${db.username}")
private String username;
@Value("${db.password}")
private String password;
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
vendorAdapter.setGenerateDdl(true);
LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
factory.setJpaVendorAdapter(vendorAdapter);         
factory.setPackagesToScan("com.example");
factory.setDataSource(dataSource());

Properties properties = new Properties();
properties.put("hibernate.format_sql", true);
properties.put("hibernate.show_sql", true);
properties.put("hibernate.hbm2ddl.auto", "none");
properties.put("hibernate.generate_statistics",  false);
factory.setJpaProperties(properties);
return factory;
}   
@Bean
public PlatformTransactionManager transactionManager() {
JpaTransactionManager txManager = new JpaTransactionManager();
txManager.setEntityManagerFactory(entityManagerFactory);
return txManager;
}   
private DataSource dataSource() {
HikariConfig hikariConfig = new HikariConfig();
hikariConfig.setJdbcUrl("db_connection_url");
hikariConfig.setUsername(username);
hikariConfig.setPassword(password);
hikariConfig.setPoolName("test_pool");
HikariDataSource hikariDataSource = new HikariDataSource(hikariConfig);
return hikariDataSource;
}   

}

您可以使用"春云巴士"。无论何时更改数据源密码配置,您的服务都可以侦听此事件,以便它可以基于新配置创建新bean。

请看这份文件https://spring.io/projects/spring-cloud-bus

这个回购有这个问题的解决方案:https://github.com/visa2learn/spring-cloud-vault-db-cred-rotation我发现它很有用。只是为了使解决方案更好地阅读SecretLeaseContainer:基于事件的容器从Vault请求机密并更新关联的Lease。可以旋转秘密,这取决于请求的requestdsecret . getmode ()

最新更新