pas*_*ian 3 environment jpa spring-mvc spring-boot microservices
我有一个使用执行器,自动配置和JPA的弹簧启动应用程序.我希望能够在我的测试配置文件中使用内存数据库,在开发期间使用MySQL数据库配置,并在应用程序部署到生产环境时使用单独的生产数据库配置.据推测,从java命令行我应该能够指定环境,并且将拾取application.properties(或.yml)中的正确配置文件或配置块.
我没有找到一个好的帖子,其中的例子描述了如何进行这种切换,所以我想我会问是否有人有一个很好的例子.我的主要目标是在构建时预先定义spring.datasource和spring.jpa属性,然后在运行时使用java命令行参数"动态"切换每个环境的应用程序配置.次要目标是对management配置等做同样的事情.
谢谢.
感谢@Richard提到spring.profiles.activeJVM变量.由于我的问题是针对Spring Boot这样做的方式而且由于答案还有很多,所以我倾向于自己回答这个问题并包括我如何得到答案的所有细节,希望能够节省其他时间.
首先,您可以java通过-Dspring.profiles.active=profile_name在运行Spring Boot应用程序时添加来在命令行中选择正确的配置文件.(这假设您的部署首选项是带有嵌入式容器的超级jar - 在我的情况下是Tomcat)
我想将MySQL数据源配置保留在默认配置文件下,并将H2内存数据源配置放在测试配置文件下.但是,Spring Boot 基于配置文件选择正确的数据源的方式并不那么明显.即使我在默认配置文件下有MySQL详细信息,并且我在测试配置文件下有内存中的H2数据源详细信息,但即使spring.profiles.active从命令行中省略,它仍然会选择H2作为数据源.这与我的假设相反,默认情况下会选择默认配置文件:-)
我最终不得不将H2配置放在默认配置文件下,然后创建一个包含MySQL数据源配置的本地配置文件.这就是我最终得到的application.yml
spring:
profiles: default
spring:
datasource:
driverClassName: org.h2.Driver
url: jdbc:h2:mem:sampletest;MODE=MySQL
---
spring:
profiles: test
spring.jpa:
hibernate:
ddl-auto: create-drop
---
spring:
profiles: local
spring.datasource:
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1/sampledev
username: sample
password: sample
spring.jpa:
hibernate:
dialect: org.hibernate.dialect.MySQLInnoDBDialect
ddl-auto: update
Run Code Online (Sandbox Code Playgroud)
这很有效.我能够之间切换,默认的配置文件,并在当地通过省略或添加轮廓-Dspring.profiles.active=local上java的命令行.因为测试配置文件继承自默认值,所以它也使用H2
还有一个细微差别:我添加ddl-auto: create-drop到测试配置文件中,该配置文件使用内存数据库来促进单元测试的自动表创建/拆卸.但对于使用MySQL的本地配置文件,我将其更改为update.这意味着对于本地配置文件,我必须首先在应用程序之外创建数据库.
| 归档时间: |
|
| 查看次数: |
8554 次 |
| 最近记录: |