java如何让springboot应用程序针对不同的作用域访问不同的数据库配置?
这曾经是前一种情况
@Bean
@ConfigurationProperties("database")
public DataSource database1DataSource() {
return DataSourceBuilder.create().build();
}
现在,为了测试SQL查询,我添加了这个
@Bean
@ConfigurationProperties("testdatabase")
public DataSource myperksTestDataSource() {
return DataSourceBuilder.create().build();
}
类似地,我为PlatformTransactionManager
和SqlSessionFactory
分别创建了两个方法。我意识到Spring boot会选择SqlSessionFactory
,如果我创建两个,就会出现冲突,并且会出现一个IllegalStateException
无法加载应用程序上下文
情况:
我想创建两个数据库连接,一个用于生产,另一个用于集成测试。我已经在application.yml
文件中为每个文件创建了配置。我希望spring选择合适的配置
我试过的
我用@Primary
注释了生产bean。成功了。我可以让春天跑起来
问题
我不直接使用SqlSessionFactory
,Spring使用。如果我用primary标记SqlSessionFactory
并编写另一个,那是没有用的,因为没有方法会调用它
因此,作为一种解决方法,我考虑有条件地为SqlSessionFactory
分配不同的数据源。但是,我如何确定运行时是一个测试呢
# 1 楼答案
只需创建一个应用程序。yml具有不同的配置文件,例如:
# 2 楼答案
您根本不需要任何Java配置。在启动应用程序时,切掉所有内容,只需在
SPRING_DATASOURCE_URL
环境变量中提供一个值;Boot将构造并连接一个DataSource
连接到那里