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引导:通过更改标志在嵌入式和postgresql数据源之间切换_Java_Spring_Spring Boot_Gradle_Spring Data Jpa - Fatal编程技术网

Java Spring引导:通过更改标志在嵌入式和postgresql数据源之间切换

Java Spring引导:通过更改标志在嵌入式和postgresql数据源之间切换,java,spring,spring-boot,gradle,spring-data-jpa,Java,Spring,Spring Boot,Gradle,Spring Data Jpa,我已经创建了一个spring启动应用程序,并一直在使用H2嵌入式数据库。这很好用 但是,我添加了application.properties文件并将依赖项添加到postgresql。这也很好,但是当我必须测试我的应用程序时,我想使用嵌入式数据库启动它。除了删除application.properties文件之外,我看不到任何其他方法,这不是一种非常整洁的方法 我希望spring.datasource.initialization mode=embedded标志将使其加载嵌入式数据库,但它完全忽略

我已经创建了一个spring启动应用程序,并一直在使用H2嵌入式数据库。这很好用

但是,我添加了application.properties文件并将依赖项添加到postgresql。这也很好,但是当我必须测试我的应用程序时,我想使用嵌入式数据库启动它。除了删除application.properties文件之外,我看不到任何其他方法,这不是一种非常整洁的方法

我希望spring.datasource.initialization mode=embedded标志将使其加载嵌入式数据库,但它完全忽略了它

有没有一种方法可以通过打开和关闭国旗来实现这一点


我使用gradle作为构建工具。如果可以通过gradle实现这一点,那就太好了。

在这种情况下,您不需要任何标志或任何类型的切换。驻留在src/main/resources中的application.properties会影响应用程序,而src/test/resources中的application.properties会影响该应用程序的测试

现在,正如您所说,您希望在测试中使用嵌入式DB,您需要在测试类中使用@DataJpaTest

@DataJpaTest提供了测试持久层所需的一些标准设置:

配置H2,内存中的数据库 设置Hibernate、Spring数据和数据源 正在执行@EntityScan 打开SQL日志记录 这就是您的存储库测试的样子

@RunWithSpringRunner.class @DataJpaTest 公共类SomeRepositoryIntegrationTest{} @自动连线 私有存储库; //在这里编写测试用例 }
您可以找到有关此主题的详细教程

在这种情况下,您不需要任何标志或任何类型的切换。驻留在src/main/resources中的application.properties会影响应用程序,而src/test/resources中的application.properties会影响该应用程序的测试

现在,正如您所说,您希望在测试中使用嵌入式DB,您需要在测试类中使用@DataJpaTest

@DataJpaTest提供了测试持久层所需的一些标准设置:

配置H2,内存中的数据库 设置Hibernate、Spring数据和数据源 正在执行@EntityScan 打开SQL日志记录 这就是您的存储库测试的样子

@RunWithSpringRunner.class @DataJpaTest 公共类SomeRepositoryIntegrationTest{} @自动连线 私有存储库; //在这里编写测试用例 }
您可以找到有关此主题的详细教程

除了@Isank所说的内容外,这在您希望运行应用程序而不是单元/集成测试,但可能需要使用内存数据库或其他数据库手动测试的情况下可能很有用

您可以定义配置文件,并且对于每个配置文件,您可以具有不同的应用程序属性。使用命名约定,假设您有三个环境dev、prod和test,您可以定义三个不同的属性文件:

application-dev.properties
application-prod.properties
application-test.properties
您需要将所有这些文件放在src/main/resources/中,以便它们能够自动拾取。或者,您需要通过传递运行时参数-spring.config.location来告诉spring boot属性文件在哪里

现在,有了所有这些文件,您如何告诉spring boot使用哪一个

如果您的属性文件是根据约定应用程序-{profile}.properties命名的,那么您可以通过传递-spring.profiles.active={profile}参数来完成命名

运行jar文件 使用bootrungradle任务 启动spring boot应用程序时,您将在控制台中看到活动的配置文件


除了@Isank所说的,当您希望运行应用程序而不是单元/集成测试,但可能需要使用内存中的数据库或其他数据库手动测试时,这可能非常有用

您可以定义配置文件,并且对于每个配置文件,您可以具有不同的应用程序属性。使用命名约定,假设您有三个环境dev、prod和test,您可以定义三个不同的属性文件:

application-dev.properties
application-prod.properties
application-test.properties
您需要将所有这些文件放在src/main/resources/中,以便它们能够自动拾取。或者,您需要通过传递运行时参数-spring.config.location来告诉spring boot属性文件在哪里

现在,有了所有这些文件,您如何告诉spring boot使用哪一个

如果您的属性文件是根据约定应用程序-{profile}.properties命名的,那么您可以通过传递-spring.profiles.active={profile}参数来完成命名

运行jar文件 使用bootrungradle任务 启动spring boot应用程序时,您将在控制台中看到活动的配置文件


谢谢,这就是我要找的!谢谢,这就是我要找的!
bootRun {
    args '--spring.profiles.active=prod'
}