使用spring-boot,我知道我可以拥有配置文件并使用不同的配置文件,具体取决于活动配置文件。 例如命令:
“mvn spring-boot:run -Drun.profiles = default,production”
将使用“application-default.properties”和“application-production.properties”中定义的设置运行我的spring-boot应用程序,第二个文件上的设置将覆盖第一个文件中定义的相同设置(对于实例数据库连接设置)。所有这一切目前都运行良好。
但是,我想使用以下命令构建我的spring-boot应用程序并生成一个可运行的jar:
“mvn package spring-boot:repackage”。
这个命令可以很好地生成自包含的runnable jar。问题是,“如何使用前一个命令指定活动配置文件?我用过
“mvn package spring-boot:repackage -Drun.profiles = default,production”
但它不起作用。
答案 0 :(得分:3)
弹簧配置文件的目标是应用程序运行时。他们不像Maven那样在打包应用程序时操作。因此,在启动应用程序时必须使用它们,而不是在打包时使用它们。
但是,如果您想生成具有某个默认配置文件的不同包,则可以使用Maven资源过滤。毕竟,使用Maven构建Spring Boot可运行jar的方法是遵循标准过程,因此您将获得Spring Boot Maven插件:
mvn clean install -PproductionMvnProfile
另见:
答案 1 :(得分:0)
我在以下线程中回答了相同的问题:Pass Spring profile in maven build ,但我将在这里再次重复答案。
如果情况相同,要使用特定配置文件运行spring boot runnable jar或war,则需要在默认application.properties文件中提供属性spring.profiles.active
,以便在生成时动态更改其值该工件,您可以执行以下操作:
首先在spring属性或yaml文件中,添加spring.profiles.active及其值作为占位符:
spring.profiles.active=@active.profile@
第二,用maven传递值:
mvn clean package spring-boot:repackage -Dactive.profile=dev
或者如果pom中已经显示了spring-boot插件,如下所示:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
您可以改为运行以下命令:
mvn clean package -Dactive.profile=dev
打包jar / war时,该值将设置为dev。
您还可以利用Maven配置文件:
<profiles>
<profile>
<id>dev</id>
<properties>
<active.profile>dev</active.profile>
</properties>
</profile>
<profile>
<id>test</id>
<properties>
<active.profile>prod</active.profile>
</properties>
</profile>
</profiles>
然后运行:
mvn clean install -Pdev
您不需要传递2个属性文件(默认文件和dev / prod文件),默认情况下,application.properties中的变量将首先执行。