gpt4 book ai didi

java - org.springframework.boot.autoconfigure.jdbc.DataSourceInitializerInvoker 循环引用 Spring Boot 2.1.3

转载 作者:太空宇宙 更新时间:2023-11-04 09:10:28 25 4
gpt4 key购买 nike

我刚刚将我的应用程序从 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 中我有以下 Bean

@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());
}

对于 ShardedDataSourceConfig 类中的 shardedDataSource,我有

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

谁能告诉我为什么会发生这种情况?

在升级之前,这种情况不会发生。

我发现了类似的问题,但该解决方案不适用于 SpringBoot 2

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

最佳答案

我通过删除 shardedDataSource 上的 @Primary 注释解决了我的问题。由于 Qualifier 用于 globalNamedParameterJdbcTemplate,因此它会自动正确地初始化 bean。

关于java - org.springframework.boot.autoconfigure.jdbc.DataSourceInitializerInvoker 循环引用 Spring Boot 2.1.3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59714599/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com