我的应用程序使用来自kafka主题的事件,并且必须在三个不同的数据库中写入一些数据。所以我有3个数据源:
对于我的第一点,我认为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
定义可与数据源设置一起使用。