Spring boot 在Spring Boot中配置两个数据源
在我的Spring Boot应用程序中配置两个数据源时,我遇到了最奇怪的情况,这两个数据源只有一个正常工作:Spring boot 在Spring Boot中配置两个数据源,spring-boot,spring-jdbc,Spring Boot,Spring Jdbc,在我的Spring Boot应用程序中配置两个数据源时,我遇到了最奇怪的情况,这两个数据源只有一个正常工作: @Configuration (...) @Bean(destroyMethod = "close") protected DataSource applicationDataSource( (...) return dataSource; } 还有两个: @Configuration (...) @Bean(destro
@Configuration
(...)
@Bean(destroyMethod = "close")
protected DataSource applicationDataSource(
(...)
return dataSource;
}
还有两个:
@Configuration
(...)
@Bean(destroyMethod = "close")
@Primary
protected DataSource applicationDataSource(
(...)
return dataSource;
}
@Configuration
(...)
@Bean
protected DataSource localDataSource(
(...)
return dataSource;
}
(它们位于不同的配置文件中)
现在奇怪的是,对于两个DS,没有相关的特定错误。我得到的错误是一个看似无关的错误,表示它找不到注入的bean实例(在与数据源无关的完全不同的配置文件中)。我确实注意到,当只使用一个DS时,DS bean在错误中显示的bean之前被实例化,这使我认为在定义两个DS时,它们被忽略了
我尝试了很多方法,包括将第二个bean声明为另一种类型的DS
@Configuration
(...)
@Bean
protected HikariDataSource localDataSource(
(...)
return dataSource;
}
但什么都没用
现在最奇怪的是,我发现了一个可行的方法,将第二个bean声明为对象(!!!)
这很有效!!!我只需要将它转换到其他地方(例如实现SqlSessionFactoryBean或DataSourceTransactionManager)
请注意,这些方法是受保护的,但我也使用public进行了测试。至于SpringBoot应用程序,无论是否排除,我都进行了测试
@Configuration
@SpringBootApplication
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class})
所以我让它工作,一切都很好,但我不知道这到底是怎么发生的,我真的很想让它工作没有黑客
干杯。我怀疑您有自动连线问题,因为配置了两个DataSource类型的bean,可能有多个bean标记为@Primary 打开org.springframework的日志应该突出显示这一点。发布启动日志
由于您实际上只创建了一个DataSource类型的bean,因此您的修复工作正常。您可以发布stacktrace吗?请检查此项
@Configuration
@SpringBootApplication
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class})