Maven和Spring Boot:如何在spring-boot:repackage上指定配置文件(profiles)

7
使用spring-boot,我知道可以使用不同的配置文件来设置不同的profile。例如,命令:
"mvn spring-boot:run -Drun.profiles=default,production"
将会使用"application-default.properties"和"application-production.properties"中定义的设置来运行我的spring-boot应用程序,第二个文件中的设置将覆盖第一个文件中相同的设置(例如数据库连接设置)。目前一切都运行良好。
然而,我想构建我的spring-boot应用程序,并使用以下命令生成可运行的jar包:
"mvn package spring-boot:repackage"
这个命令确实可以生成自包含的可运行jar包。问题是,如何在前面的命令中指定激活的profile?我已经尝试了
"mvn package spring-boot:repackage -Drun.profiles=default,production"
但它没有起作用。
2个回答

7

我在这个帖子中回答了相同的问题:Pass Spring profile in maven build ,但是我会在这里再次重复答案。

如果有人遇到相同的情况,要在特定的配置文件中运行一个Spring Boot可运行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个属性文件(默认和开发/生产环境),因为默认情况下,application.properties中的变量将首先被执行。


非常感谢!它帮了我很多! - WitnessTruth

3

Spring配置文件是针对应用程序运行时的。它们不像Maven配置文件那样在打包应用程序时起作用。因此,您必须在启动应用程序时使用它们,而不是在打包应用程序时使用。

然而,如果您想生成带有某些默认配置文件的不同软件包,可以尝试使用Maven资源过滤。毕竟,使用Maven构建Spring Boot可运行jar的方法是遵循标准流程,因此需要涉及Spring Boot Maven插件:

mvn clean install -PproductionMvnProfile

另请参阅:


我只有一个问题:为什么在使用命令“mvn spring-boot:run”时,选项“-Pprofilename”无法正常工作。我尝试了这个命令“mvn spring-boot:run -Pdev”,但它仅运行默认激活的配置文件,而不是dev配置文件。 - Jimmy
有关Spring配置文件,请参见此线程:https://github.com/spring-projects/spring-boot/issues/1095 - Aritz
嗨,感谢您迅速回复。我已经使用“mvn spring-boot:run -Dspring.profiles.active =”production“命令运行Spring配置文件,并且它正在工作。现在,我正在从pom.xml中处理分析。因此,我阅读了文档,他们说在mvn clean package之后使用-Pprofilename命令。那很好用。但是-Pprofilename与spring-boot:run不起作用。这是预期的行为吗? - Jimmy
“not working”是什么意思?您应该发布一个新问题,并详细描述您的问题。 - Aritz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接