java - Spring Boot:通过更改标志在嵌入式和 postgresql 数据源之间切换
问题描述
我已经创建了一个 spring boot 应用程序,并且一直在使用 H2 嵌入式数据库。哪个工作正常。
但是,我添加了application.properties
文件并将依赖项添加到 postgresql。这也可以正常工作,但是当我必须测试我的应用程序时,我想使用嵌入式数据库启动它。除了删除文件之外,我没有看到任何其他方法application.properties
,这不是一种非常简洁的方法。
我希望该标志spring.datasource.initialization-mode=embedded
会使其加载嵌入式数据库,但它完全忽略了它。
有没有办法通过打开和关闭标志来实现这一点?
我正在使用 gradle 作为构建工具。如果可以通过 gradle 实现这一点,那就太好了。
解决方案
除了@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}
参数来完成。
- 运行
jar
文件
java -jar spring-boo-app-name.jar --spring.profiles.active=prod
//this will use the application-prod.properties file
- 使用
bootRun
gradle 任务
bootRun {
args '--spring.profiles.active=prod'
}
当您启动 spring-boot 应用程序时,您将在控制台中看到活动配置文件。
推荐阅读
- geometry - 球体表面上的均匀空间箱
- variables - 通过引用另一个变量来分配变量
- mysql - 如何将一个列/表中的多个日期的逻辑应用于另一列/表中的多个日期?
- phpunit - Travis CI 是否检查多个 .travis.yml 文件?
- google-app-engine - 将 Google App Engine 作为 PHP 命令行运行?
- pycharm - 双击选择整个驼峰式单词?
- java - 使用 Java 组合来自多个 RDD 的数据
- neural-network - 3 层神经网络无法正确学习
- drone - 多步并行阶段的配置
- php - 我如何上传文件 Curl PHP