spring 始终使用相同的配置文件启动
spring boot always using the same profile
我正在使用 spring boot 1.5.2,并且使用配置文件,但我发现了一个很奇怪的事情。
我的spring启动资源文件夹是这样的:
配置在application.yml
spring:
profiles:
active: @profileActive@
应用-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
应用-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 配置出了什么问题。
提前致谢!
尝试运行你的罐子
java -jar -Dspring.profiles.active=test yourapp.jar
或将@profileActive@替换为您需要的配置文件名称。
问题可能是,当 spring 启动读取您的 application.yml 时,它已经决定回退到默认配置文件。从那时起,我认为,切换配置文件为时已晚。
您可以尝试在名为 "bootstrap.yml" 的配置文件中定义 spring.profiles.active 属性。这可能对你有用。
我用 spring-boot-starter-web
复制了您的描述,作为能够启动小型应用程序的附加依赖项。
一切正常。如果我 运行 mvn clean package -Ptest
test
配置文件将被激活。与其他配置文件相同。我将所有配置文件放在一个 yml
文件中,注释掉 <include>application-${profileActive}.yml</include>
并且它也有效。
当我像您一样从父文件系统路径执行 JAR 文件时,一切都按预期工作。当我同时使用另一个配置文件执行另一个 Maven 构建并重新启动应用程序时,将使用新的配置文件。
如果您将 mvn clean package
与 dev
之外的另一个配置文件一起使用,则生成的 JAR 中不可能有任何 application-dev.yml
。如果没有 clean
和具有不同 Maven 配置文件的不同构建,它们将全部在 JAR 中。
您使用哪个OS?是否有可能某些东西在您的 JAR 文件上持有文件句柄并且不会被替换?但这应该在您的 Maven 构建中发出信号。
我个人会做以下事情:
1) 从您的 application.yaml 中删除它(因为您可以为此设置一个 JVM 属性)
spring:
profiles:
active: @profileActive@
2) 从每个配置文件特定的 yaml 文件中删除配置文件特定的 header。您不需要它,因为配置文件基于文件后缀,例如删除这个:
spring:
profiles: dev
3) 正如 Oleg 所说,运行 你的任务 Dspring.profiles.active=Whatever
终于找到原因了
我的项目是一个多模块maven项目。
我正在使用 yml
格式的一个模块,
等为property
格式。
当我将两个模块都设为yml格式时,一切正常。
谢谢大家!谢谢!
我正在使用 spring boot 1.5.2,并且使用配置文件,但我发现了一个很奇怪的事情。
我的spring启动资源文件夹是这样的:
配置在application.yml
spring:
profiles:
active: @profileActive@
应用-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
应用-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 配置出了什么问题。
提前致谢!
尝试运行你的罐子
java -jar -Dspring.profiles.active=test yourapp.jar
或将@profileActive@替换为您需要的配置文件名称。
问题可能是,当 spring 启动读取您的 application.yml 时,它已经决定回退到默认配置文件。从那时起,我认为,切换配置文件为时已晚。
您可以尝试在名为 "bootstrap.yml" 的配置文件中定义 spring.profiles.active 属性。这可能对你有用。
我用 spring-boot-starter-web
复制了您的描述,作为能够启动小型应用程序的附加依赖项。
一切正常。如果我 运行 mvn clean package -Ptest
test
配置文件将被激活。与其他配置文件相同。我将所有配置文件放在一个 yml
文件中,注释掉 <include>application-${profileActive}.yml</include>
并且它也有效。
当我像您一样从父文件系统路径执行 JAR 文件时,一切都按预期工作。当我同时使用另一个配置文件执行另一个 Maven 构建并重新启动应用程序时,将使用新的配置文件。
如果您将 mvn clean package
与 dev
之外的另一个配置文件一起使用,则生成的 JAR 中不可能有任何 application-dev.yml
。如果没有 clean
和具有不同 Maven 配置文件的不同构建,它们将全部在 JAR 中。
您使用哪个OS?是否有可能某些东西在您的 JAR 文件上持有文件句柄并且不会被替换?但这应该在您的 Maven 构建中发出信号。
我个人会做以下事情:
1) 从您的 application.yaml 中删除它(因为您可以为此设置一个 JVM 属性)
spring:
profiles:
active: @profileActive@
2) 从每个配置文件特定的 yaml 文件中删除配置文件特定的 header。您不需要它,因为配置文件基于文件后缀,例如删除这个:
spring:
profiles: dev
3) 正如 Oleg 所说,运行 你的任务 Dspring.profiles.active=Whatever
终于找到原因了
我的项目是一个多模块maven项目。
我正在使用 yml
格式的一个模块,
等为property
格式。
当我将两个模块都设为yml格式时,一切正常。
谢谢大家!谢谢!