【发布时间】:2017-09-03 21:18:38
【问题描述】:
我正在使用spring boot 1.5.2,并且使用配置文件但我发现了一个非常奇怪的事情。
application.yml 中的配置
spring:
profiles:
active: @profileActive@
application-dev.yml
spring:
profiles: dev
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/db1
username: root
password:
server:
port: 8080
application-test.yml
spring:
profiles: test
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/db2
username: root
password:
server:
port: 8081
我的 pom.xml,只包含资源部分和配置文件部分。
<!-- profile -->
<profiles>
<profile>
<id>dev</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<build.profile.id>dev</build.profile.id>
<profileActive>dev</profileActive>
</properties>
</profile>
<profile>
<id>test</id>
<properties>
<build.profile.id>test</build.profile.id>
<profileActive>test</profileActive>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<build.profile.id>prod</build.profile.id>
<profileActive>prod</profileActive>
</properties>
</profile>
</profiles>
<resources>
<resource>
<directory>src/main/java</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>application-${profileActive}.yml</include>
<include>application.yml</include>
<include>templates/*</include>
</includes>
</resource>
</resources>
我现在正在尝试使用测试配置文件,发现一切正常,@profileActive@ 已被替换为test;
mvn clean package -Dmaven.test.skip=true -Ptest
看起来一切正常。
但是当我尝试运行 jar 时,它总是使用 dev 配置文件,尽管application.yml 显示我们现在使用test or prod 配置文件。
我不知道我的 yml 配置哪里出了问题。我尝试将所有配置文件配置包含在一个 application.yml 文件中。但应用程序仍在使用dev 配置文件。
在一个 application.yml 文件中完全配置
spring:
profiles:
active: @profileActive@
---
spring:
profiles: dev
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/db1
username: root
password:
server:
port: 8080
---
spring:
profiles: test
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/db2
username: root
password:
server:
port: 8081
---
spring:
profiles: prod
server:
port: 9000
最后,我尝试使用 properties 文件,我的所有配置工作正常,当我运行我的应用程序时可以使用正确的配置文件。
现在,我只想知道我的 yml 配置出了什么问题。
提前致谢!
【问题讨论】:
-
您能否将所有部分放在一个 Git 存储库中,以便轻松查看确切您是如何配置的?
-
我刚刚创建了一个与您定义的完全相同的简单项目。一切都按预期工作。您可以尝试在 IntelliJ 之外运行 jar 吗?
标签: maven spring-boot maven-profiles spring-profiles spring-properties