有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何让springboot应用程序针对不同的作用域访问不同的数据库配置?

这曾经是前一种情况

@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使用。如果我用primary标记SqlSessionFactory并编写另一个,那是没有用的,因为没有方法会调用它

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


共 (2) 个答案

  1. # 1 楼答案

    只需创建一个应用程序。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
    
  2. # 2 楼答案

    您根本不需要任何Java配置。在启动应用程序时,切掉所有内容,只需在SPRING_DATASOURCE_URL环境变量中提供一个值;Boot将构造并连接一个DataSource连接到那里