7

使用 spring-boot,我知道我可以拥有配置文件并根据活动配置文件使用不同的配置文件。例如命令:

“mvn spring-boot:run -Drun.profiles=default,production”

将使用“application-default.properties”和“application-production.properties”中定义的设置运行我的spring-boot应用程序,第二个文件上的设置覆盖第一个文件中定义的相同设置(例如db连接设置)。目前这一切都运行良好。

但是,我想构建我的 spring-boot 应用程序并使用以下命令生成一个可运行的 jar:

“mvn 包 spring-boot:repackage”。

该命令确实可以很好地生成独立的可运行 jar。问题是,¿如何使用前一个命令指定活动配置文件?我用过

“mvn package spring-boot:repackage -Drun.profiles=default,production”

但它不工作。

4

2 回答 2

5

我在这个线程中回答了同样的问题:Pass Spring profile in maven build ,但我将在这里再次重复答案。

如果有人遇到同样的情况,要使用特定配置文件运行 spring boot 可运行 jar 或 war,您需要spring.profiles.active在默认 application.properties 文件中提供该属性,以便在生成工件时动态更改其值,您可以这样做:

首先在 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 中的变量将首先执行。

于 2019-03-30T23:47:12.963 回答
3

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

但是,如果你想生成不同的包,每个包都有一些默认配置文件,你可以使用 Maven 资源过滤。毕竟,使用 Maven 构建 Spring Boot 可运行 jar 的方法是遵循标准程序,因此您需要涉及 Spring Boot Maven 插件:

mvn clean install -PproductionMvnProfile

也可以看看:

于 2016-03-20T19:02:57.940 回答