这曾经是以前的情况。
@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会这样做。如果我将SqlSessionFactory
标记为primary并写入另一个,则没有用,因为没有方法可以调用它。
因此,作为一种解决方案,我想到有条件地为SqlSessionFactory
分配不同的数据源。但是,我如何确定运行时间是一个测试。
答案 0 :(得分:3)
您根本不需要任何Java配置。切断所有内容,只需在启动应用程序时在SPRING_DATASOURCE_URL
环境变量中提供一个值;引导将构建并连接DataSource
连接在那里。
答案 1 :(得分:0)
只需创建一个包含不同配置文件的application.yml,例如:
spring:
profiles: dev
datasource:
url: jdbc:h2DEV:mem;DB_CLOSE_ON_EXIT=FALSE
username: sa
password:
driverClassName: org.h2.Driver
spring:
profiles: integ
datasource:
url: jdbc:h2Integ:mem;DB_CLOSE_ON_EXIT=FALSE
username: sa
password:
driverClassName: org.h2.Driver