Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.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 Boot进行测试时,仅从测试/资源加载数据_Java_Spring_Hibernate_Spring Boot - Fatal编程技术网

Java 使用Spring Boot进行测试时,仅从测试/资源加载数据

Java 使用Spring Boot进行测试时,仅从测试/资源加载数据,java,spring,hibernate,spring-boot,Java,Spring,Hibernate,Spring Boot,我有一个与Hibernate集成的Spring引导应用程序,用于数据库持久性 我有两个不同的data.sql文件: src/main/resources中的一个用于数据库初始化 一个位于src/test/resources中,用于测试目的 在测试时,它们都是在任何测试类之前加载的。但是,我只想加载test/resources一个,只留下main/resources一个用于应用程序初始化 我该怎么做 谢谢。您应该将spring.jpa.hibernate.ddl auto=create更改为u

我有一个与Hibernate集成的Spring引导应用程序,用于数据库持久性

我有两个不同的data.sql文件:

  • src/main/resources中的一个用于数据库初始化
  • 一个位于src/test/resources中,用于测试目的
在测试时,它们都是在任何测试类之前加载的。但是,我只想加载test/resources一个,只留下main/resources一个用于应用程序初始化

我该怎么做


谢谢。

您应该将
spring.jpa.hibernate.ddl auto=create
更改为
update
(它只更新.sql文件中的更改),因为每次运行应用程序时使用create,“清理数据库”,所以每次都会处理这两个.sql


我希望这能解决您的问题。

如果测试类正在启动spring启动应用程序,那么我认为您不能停止加载main/resources.sql文件

但是,如果您想在执行方法之前/之后(在测试类中)从test/resources加载.sql文件,那么您可以使用@SqlGroup注释

@SqlGroup({
    @Sql(executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD, scripts = "classpath:beforeTestRun.sql"),
    @Sql(executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD, scripts = "classpath:afterTestRun.sql")

          })

您可以将以下配置(至少在spring boot 2中)添加到test application.yaml或application.properties文件中

spring:
  datasource:
    data: data.sql

设置此值后,spring boot将仅在运行测试时加载test data.sql。

为测试维护一个单独的属性文件,因为它将帮助您将测试和开发分离开来

application.properties for dev
application-local.properties for local env
application-test.properties for test 
根据您的需要拥有配置文件,并具有与配置文件相关的属性


另一种选择是根据您的需要覆盖属性。

您可以为main和testing显示Spring引导注释吗?@EstanislaoPérezNartallo与hibernate相关的唯一注释是Spring.jpa.hibernate.ddl auto=createthem@AlbertoCasta尼诺你解决了吗?没有!也许我解释得不够好。我想要的是每次运行测试时都从头开始创建数据库,但只能从test/resources/data.sql,而不是从main/resources/data.sql。现在两个都被调用了@Rahul说,你不能停止加载main/resources.sql文件。因为是应用程序运行所必需的。