首页 > 解决方案 > Spring Boot:通过更改标志在嵌入式和 postgresql 数据源之间切换

问题描述

我已经创建了一个 spring boot 应用程序,并且一直在使用 H2 嵌入式数据库。哪个工作正常。

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

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

有没有办法通过打开和关闭标志来实现这一点?

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

标签: javaspringspring-bootgradlespring-data-jpa

解决方案


除了@Isank 所说的之外,这在您想使用内存数据库或仅使用不同的数据库运行应用程序(不是单元/集成测试,但可能手动测试它)的情况下可能很有用。

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

application-dev.properties
application-prod.properties
application-test.properties

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

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

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

  1. 运行jar文件
java -jar spring-boo-app-name.jar --spring.profiles.active=prod 
//this will use the application-prod.properties file
  1. 使用bootRungradle 任务
bootRun {
    args '--spring.profiles.active=prod'
}

当您启动 spring-boot 应用程序时,您将在控制台中看到活动配置文件。

在此处输入图像描述


推荐阅读