感谢@Richard 提到spring.profiles.active
JVM 变量。由于我的问题是特定于Spring Boot执行此操作的方式,并且由于答案还有很多,我倾向于自己回答这个问题,并包括我如何得出答案的所有细节,希望它能节省其他人的时间.
首先,您确实可以通过在运行 Spring Boot 应用程序时java
添加来在命令行上选择正确的配置文件。-Dspring.profiles.active=profile_name
(这是假设您的部署偏好是带有嵌入式容器的 uber jar - 在我的例子中是 Tomcat)
我想将MySQL数据源配置保留在默认配置文件下,并将H2内存数据源配置放在测试配置文件下。但是,Spring Boot根据配置文件选择正确的数据源的方式并不那么明显。即使我在默认配置文件下有 MySQL 详细信息,并且我在测试spring.profiles.active
配置文件下有内存中 H2 数据源详细信息,但即使在命令行中省略了它,它仍然会选择 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
这行得通。通过在命令行上省略或添加 ,我能够在默认配置文件和本地配置文件之间切换。因为测试配置文件从默认继承它也使用 H2-Dspring.profiles.active=local
java
还有一个细微差别:我添加ddl-auto: create-drop
了测试配置文件,它使用内存数据库来促进单元测试的自动表创建/拆卸。但是对于使用 MySQL 的本地配置文件,我将其更改为update
. 这意味着对于本地配置文件,我必须首先在应用程序之外创建数据库。