Spring使用AbstractRoutingDataSource

时间:2019-02-13 09:34:51

标签: spring-boot jpa spring-data-jpa datasource spring-config

我的应用程序使用来自kafka主题的事件,并且必须在三个不同的数据库中写入一些数据。所以我有3个数据源:

  • ds1和ds2具有相同的架构,我将始终根据事件中的值写入一个
  • ds3是不同的,我将始终根据每个事件读/写一些东西。

对于我的第一点,我认为AbstractRoutingDataSource是一个很好的解决方案,并且可以正常工作,但是不幸的是,我无法使第三个数据源正常工作。

@Slf4j
@Configuration
@EnableJpaRepositories(basePackages = "package.to.repository")
public class DataSourceConfig {

    @Bean
    @ConfigurationProperties("application.datasource1")
    public DataSource datasource1() {
        return DataSourceBuilder.create().build();
    }

    @Bean
    @ConfigurationProperties("application.datasource2")
    public DataSource datasource2() {
        return DataSourceBuilder.create().build();
    }

    @Bean
    @Primary
    public DataSource routingDataSource(@Qualifier("datasource1") DataSource datasource1,
            @Qualifier("datasource2") DataSource datasource2) {
        DbRoutingDataSource dbRoutingDataSource = new DbRoutingDataSource();

        Map<Object, Object> targetDataSources = new HashMap<>();
        targetDataSources.put(DataSource.DS1, datasource1);
        targetDataSources.put(DataSource.DS2, datasource2);

        dbRoutingDataSource.setDefaultTargetDataSource(datasource1);
        dbRoutingDataSource.setTargetDataSources(targetDataSources);

        return dbRoutingDataSource;
    }

}

Datasource3配置:

@Slf4j
@Configuration
@EnableJpaRepositories(basePackages = {"com.myapp.otherpackage"})
public class DataSource3Config {

    @Bean
    @ConfigurationProperties(prefix = "application.datasource3")
    public DataSource datasource3() {
        return DataSourceBuilder.create().build();
    }

    @Bean
    public JdbcTemplate JdbcTemplate() {
        return new JdbcTemplate(datasource3());
    }
}

由于某种原因,Spring没有为DataSource3Config配置存储库。可能是数据源3的配置不正确/不完整?请注意,jdbcTemplate定义可与数据源设置一起使用。

0 个答案:

没有答案