如何在不使用配置文件的情况下覆盖测试的Spring Boot应用程序属性?

时间:2017-04-11 15:22:42

标签: java spring spring-boot spring-data-jpa

我发现有关在Spring Boot中使用主生产数据库和测试内存数据库进行典型设置的所有信息非常稀少。

  • 测试属性没有约定,测试中的application.properties显然覆盖了main中的那些,并且没有像application-test.properties - >这样的回退机制。 application.properties。我不想使用配置文件,因为我希望他们严格定义环境,这是另一个维度(本地,生产),我需要笛卡尔产品主要本地,测试本地,主要生产,测试-production ..

  • 所以我要让Spring为我做魔术,因此我在RepositoryTest上设置@DataJpaTest注释。 Spring当然会动态创建H2数据库,但我找不到设置自定义模式或启用H2控制台的方法,因为忽略了application.properties。

这是如何处理这个问题的最标准方法?

P.S。我认为这样做的简单方法是通过@SpringBootTest(properties = { "h2.console.enabled: true", "h2.console.path: /myconsole" })覆盖测试中的属性,但我无法找到@DataJpaTest绑定它们的方法

1 个答案:

答案 0 :(得分:3)

您可以提供第二个application.yml / application.properties用于路径src/test/resources的测试。位于测试上下文中的那个用于测试,当您运行应用程序时,将使用src/main/resources处的文件。

E.g。生产配置(使用postgres和ddl-auto验证以保存您的数据)放置在src/main/resources

spring:
  datasource:
    url: jdbc:postgresql://localhost/postgres
    username: postgres
    password: postgres
    driver-class-name: org.postgresql.Driver
  jpa:
    database-platform: org.hibernate.dialect.PostgreSQLDialect
    hibernate:
      ddl-auto: validate

测试配置(使用H2和ddl-auto create-drop)放置在src/test/resources

spring:
  datasource:
    url: jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
    username: sa
    password:
    driver-class-name: org.h2.Driver
  jpa:
    database-platform: org.hibernate.dialect.H2Dialect
    hibernate:
      ddl-auto: create-drop