Spring загружает несколько источников данных с помощью AbstractRoutingDataSource - PullRequest
0 голосов
/ 13 февраля 2019

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...