2017-04-11 48 views
0

我发现极其稀缺的关于在Spring Boot中使用主生产数据库和测试in-mem数据库进行典型设置的所有信息。如何在不使用配置文件的情况下为测试重写Spring Boot应用程序属性?

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

  • 所以我会让Spring为我做魔术,因此我在我的RepositoryTest上设置了@DataJpaTest注解。 Spring肯定会创建H2 db,但我没有找到设置自定义模式或启用H2控制台的方法,因为application.properties被忽略。

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

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

+1

H2控制台需要一个在DataJpaTest中不可用的Web环境。为什么要在短暂的内存数据库中设置自定义模式? –

+0

为了方便调试所有数据库的工作 – Whimusical

+0

在春天注册bean的传统方式是调用org.h2.server,我不知道为什么要配置webenv,我从不需要它在预启动弹簧 – Whimusical

回答

3

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

E.g.生产配置(使用的是Postgres和DDL-自动验证,让您的数据)放在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-自动创建滴)放置在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 
相关问题