看这段代码:
@ConfigurationProperties(prefix = "first.datasource")
@Bean
public DataSource dataSourceFIRST() {
return DataSourceBuilder
.create()
.build();
}
@ConfigurationProperties(prefix = "second.datasource")
@Bean
public DataSource dataSourceSECOND {
return DataSourceBuilder
.create()
.build();
}
@Primary
@Bean
public MyRoutingDataSource routingDataSource(){
MyRoutingDataSource rDS= new MyRoutingDataSource ();
rDS.setDefaultTargetDataSource(dataSourceFIRST);
// some logic for config routing datasource (setting datasources)
// and creating targed data source tDS
//rDS.afterPropertiesSet(); (***)
rDS.setTargetDataSources(tDS);
return rDS;
}
获取错误:
┌─────┐
| routingDataSource defined in App
↑ ↓
| dataSourceFIRST defined in App
↑ ↓
| dataSourceInitializer
└─────┘
取消注释 (***)
可以使这段代码正常运行。但是,我不能取消注释 (***)
因为它会覆盖 application.properties 中的必要配置。
然而,偶然我找到了解决方案(在我看来)。
我将第一个和第二个数据源注释为 @PostConstruct
(在 @Bean
注释旁边 - 我没有删除此注释)。
你能解释一下为什么它有帮助吗?如果可以解决?也许这种方法有问题。
最佳答案
如果您想尝试不同的东西。
我这边折腾了半天,最后还是发现排除掉DataSourceAutoConfiguration类
@EnableAutoConfiguration(exclude = { DataSourceAutoConfiguration.class })
关于java - 解决bean三个数据源的循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41174193/