我发现有关在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绑定它们的方法
答案 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