解决bean三个数据源的循环

时间:2016-12-15 22:15:23

标签: java spring datasource

看看这段代码:

@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注释旁边 - 我没有删除此注释)。

你能解释一下为什么它有帮助吗?如果可以解决方案吗?也许这种方法存在一些问题。

2 个答案:

答案 0 :(得分:2)

如果你想尝试不同的东西。

在我身边,我打了很长时间,最后还发现排除了DataSourceAutoConfiguration类

@EnableAutoConfiguration(exclude = { DataSourceAutoConfiguration.class })

答案 1 :(得分:1)

我遇到了同样的问题。经过很多时间,我找到了解决方案 在这个问题上: Circular dependencies error on Spring Boot's DataSourceInitializer

设置spring.datasource.initialize = false。希望这可以帮助您。