如何让spring-boot应用程序访问不同范围的数据库的不同配置?

时间:2017-04-25 06:58:07

标签: java spring spring-boot

这曾经是以前的情况。

@Bean
  @ConfigurationProperties("database")
  public DataSource database1DataSource() {
    return DataSourceBuilder.create().build();
  }

现在,为了测试SQL查询,我添加了这个,

@Bean
  @ConfigurationProperties("testdatabase")
  public DataSource myperksTestDataSource() { 
    return  DataSourceBuilder.create().build();
  }

同样,我为PlatformTransactionManagerSqlSessionFactory创建了两种方法。我意识到Spring-boot选择了SqlSessionFactory,如果我创建了两个就会出现冲突,并且会有IllegalStateException无法加载应用程序上下文。

场合

我想创建两个数据库连接,一个用于生产,另一个用于集成测试。我在application.yml文件中为每个创建了配置。我希望spring能够选择合适的配置。

我尝试了什么

我用@Primary注释了生产bean。哪个有效。我可以让春天跑。

问题

我不直接使用SqlSessionFactory,Spring会这样做。如果我将SqlSessionFactory标记为primary并写入另一个,则没有用,因为没有方法可以调用它。

因此,作为一种解决方案,我想到有条件地为SqlSessionFactory分配不同的数据源。但是,我如何确定运行时间是一个测试。

2 个答案:

答案 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