@ConfigurationProperties在两个不同的bean上使用相同的DB前缀



在我的应用程序属性中,我有

spring.datasource.hikari.connection-timeout=10000
spring.datasource.hikari.validation-timeout=3000
spring.datasource.hikari.leak-detection-threshold=90000
spring.datasource.hikari.max-lifetime=3600000

我有两个数据源将使用相同的配置属性

@ConfigurationProperties(prefix = "spring.datasource.hikari")
@Bean
public HikariDataSource dataSource() throws Exception {
@ConfigurationProperties(prefix = "spring.datasource.hikari")
@Bean
public HikariDataSource altDataSource() throws Exception {

就在一周前,它还在工作,但现在我在清理和构建时遇到了错误:

> Task :compileJava
error: Duplicate `@ConfigurationProperties` definition for prefix 'spring.datasource.hikari'
public HikariDataSource altDataSource() throws Exception {

我在这里阅读了一些不同的解决方案,但除了编辑我的属性文件之外,还有其他解决方案吗?因为这是一周前的工作,这可能是IDE的问题吗?

使用类似的Spring配置文件

class SomeOtherProfileConfig extends MyConfig {
}
@Profile("MyProfile")
@Bean(initMethod = "init", name = "MyConfig")
@ConfigurationProperties(prefix = "config")
public MyConfig config() {
MyConfig config = new MyConfig();
return config;
}
@Profile("!MyProfile")
@Bean(initMethod = "anotherInit", name = "MyConfig")
@ConfigurationProperties(prefix = "config")
public SomeOtherProfileConfig myConfig() {
SomeOtherProfileConfig config = new SomeOtherProfileConfig();
return config;
}

你应该这样做

我会将两个@Bean方法组合为一个,并使用Environment检查spring.datasource.hikari.refresh属性的值,然后则根据需要设置Hikari系统属性

来源:https://github.com/spring-projects/spring-boot/issues/6781#issuecomment-857624340

最新更新