Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在不使用概要文件的情况下覆盖测试的Spring启动应用程序属性?_Java_Spring_Spring Boot_Spring Data Jpa - Fatal编程技术网

Java 如何在不使用概要文件的情况下覆盖测试的Spring启动应用程序属性?

Java 如何在不使用概要文件的情况下覆盖测试的Spring启动应用程序属性?,java,spring,spring-boot,spring-data-jpa,Java,Spring,Spring Boot,Spring Data Jpa,我发现关于在Spring Boot中使用一个主生产数据库进行典型设置和在mem db中进行测试的所有信息都非常缺乏 测试属性没有约定,测试中的application.properties显然会覆盖main中的属性,并且没有类似application-test.properties->application.properties的回退机制。我不想使用概要文件,因为我希望它们严格定义环境,这是另一个维度(本地、生产),我需要笛卡尔产品main local、test local、main produ

我发现关于在Spring Boot中使用一个主生产数据库进行典型设置和在mem db中进行测试的所有信息都非常缺乏

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

  • 所以我要让Spring为我变魔术,所以我在RepositoryTest上设置@DataJpaTest注释。Spring当然会动态创建H2DB,但我没有找到一种方法来设置自定义模式或启用H2控制台,因为application.properties会被忽略

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


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

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

例如,生产配置(使用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
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
以及放置在
src/test/resources
的测试配置(使用H2和ddl自动创建下拉列表):

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

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

例如,生产配置(使用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
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
以及放置在
src/test/resources
的测试配置(使用H2和ddl自动创建下拉列表):

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

H2控制台需要一个在
DataJpaTest
中不可用的web环境。为什么要在临时内存数据库中设置自定义模式?要轻松调试所有数据库工作,在spring中注册bean的传统方法是调用org.h2.server,我不知道为什么要配置webenv,我在预引导spring中从来都不需要它。我真的认为配置文件正是您要找的。我知道您可能只想以某种方式使用它们,但这是许多开发人员使用它们的用例之一。也可以使用您的构建工具,如根据需要将所需的属性文件复制到您的运行时环境中,但我宁愿使用profiles.H2控制台需要一个在
DataJpaTest
中不可用的web环境。为什么要在内存数据库中设置一个自定义模式?要轻松调试所有db工作,传统的方式在春季注册bean是通过调用org.h2.server,我不知道为什么我们应该配置webenv,我从来没有需要它在启动前spring中我真的认为配置文件正是您要寻找的。我知道您可能只想以某种方式使用它们,但这是许多开发人员使用它们的用例之一。也可以使用您的构建工具,如根据需要将所需的属性文件复制到您的运行时环境中,但我更愿意使用配置文件。