Мое приложение потребляет события из темы кафки и должно записывать некоторые данные в три разные базы данных.Таким образом, у меня есть 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;
}
}
Конфигурация источника данных3:
@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
определено работает с настройкой источника данных.