org.springframework.boot.autoconfigure.jdb c .DataSourceInitializerInvoker циклическая ссылка Spring Boot 2.1.3 - PullRequest
1 голос
/ 13 января 2020

Я только что обновил свое приложение с Spring Boot 1.5.9 до 2.1.3. У нас есть 2 базы данных, одна не защищенная, а другая - защищенная. При попытке запустить приложение я получаю следующую ошибку:

┌─────┐
|  shardedDataSource defined in class path resource [com/config/ShardedDataSourceConfig.class]
↑     ↓
|  globalNamedParameterJdbcTemplate defined in class path resource [com/config/GlobalDataSourceConfig.class]
↑     ↓
|  globalJdbcTemplate defined in class path resource [com/config/GlobalDataSourceConfig.class]
↑     ↓
|  global defined in class path resource [com/config/GlobalDataSourceConfig.class]
↑     ↓
|  org.springframework.boot.autoconfigure.jdbc.DataSourceInitializerInvoker
└─────┘

В GlobalDataSourceConfig у меня есть следующие Beans

@Bean(name = "global")
    public DataSource globalDataSource() {
        return new HikariDataSource(this);
    }

    @Bean(name = "globalJdbcTemplate")
    public JdbcTemplate globalJdbcTemplate() {
        return new JdbcTemplate(globalDataSource());
    }

    @Bean(name="globalNamedParameterJdbcTemplate")
    public NamedParameterJdbcTemplate globalNamedParameterJdbcTemplate() {
        return new NamedParameterJdbcTemplate(globalJdbcTemplate());
    }

И для shardedDataSource в классе ShardedDataSourceConfig у меня есть

  @Primary @Bean @Profile("!test")
    public DataSource shardedDataSource(@Qualifier("globalNamedParameterJdbcTemplate") NamedParameterJdbcTemplate jdbcTemplate) {

Кто-нибудь может дать мне представление, почему это происходит?

До обновления этого не происходило.

Я обнаружил похожую проблему, но решение для SpringBoot 2 не работает

https://github.com/spring-projects/spring-boot/issues/9394

1 Ответ

0 голосов
/ 14 января 2020

Я исправил проблему, удалив аннотацию @Primary на shardedDataSource. Поскольку для globalNamedParameterJdbcTemplate используется Qualifier, он автоматически выполняет инициализацию bean-компонентов правильно.

...