Spring:从命令行覆盖一个application.property

时间:2016-05-05 14:10:26

标签: java spring spring-boot

我有一个带有默认变量值的application.properties文件。我希望能够在使用mvn spring-boot:run时更改其中一个。我找到了如何更改整个文件,但我只想更改其中一个或两个属性。

6 个答案:

答案 0 :(得分:47)

您可以将各个属性作为命令行参数传递。例如,如果要设置server.port,则可以在启动可执行jar时执行以下操作:

java -jar your-app.jar --server.port=8081

或者,如果您正在使用mvn spring-boot:run

mvn spring-boot:run -Drun.arguments="--server.port=8081"

您还可以在应用程序的spring-boot:run中配置pom.xml的参数,这样就不必每次都在命令行中指定它们:

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <arguments>
            <argument>--server.port=8085</argument>
        </arguments>
    </configuration>
</plugin>

答案 1 :(得分:10)

快速更新:

如果您使用的是最新版本的spring-boot 2.X和maven 3.X,则以下命令行将覆盖您的服务器端口:

java -jar -Dserver.port=9999   your_jar_file.jar

答案 2 :(得分:6)

要进行一些更新,Spring Boot 1.X Maven插件依赖于--Drun.arguments Maven用户属性,而Spring Boot 2.X Maven插件依赖于-Dspring-boot.run.arguments Maven用户属性。

因此对于Spring 2,您需要执行以下操作:

mvn spring-boot:run -Dspring-boot.run.arguments="--server.port=8081"

如果需要传递多个参数,则必须使用,作为分隔符,并且永远不要在参数之间使用空格:

mvn spring-boot:run -Dspring-boot.run.arguments="--server.port=8081,--foo=bar"

关于maven插件配置以及从胖罐传递参数的方式,它没有改变。
因此,非常好的安迪·威尔金森答案仍然正确。

答案 3 :(得分:1)

如果不使用逗号,要在多种模式下覆盖某些自定义属性或spring boot属性,请使用空格代替逗号,例如下面的代码:

mvn spring-boot:run -Dspring-boot.run.arguments="--server.port=8899 --your.custom.property=custom"

答案 4 :(得分:0)

在Spring Boot中,我们提供了覆盖以下属性的条件

mvn spring-boot:run -Dspring-boot.run.arguments=--server.port=8082

答案 5 :(得分:0)

您可以设置环境变量来覆盖属性。例如,您有一个属性名称test.props=1。如果您有环境变量TEST_PROPS,则Spring Boot会自动覆盖它。

export TEST_PROPS=2
mvn spring-boot:run

您还可以使用所需的所有属性创建一个json字符串,并使用-Dspring.application.json传递它,或使用SPRING_APPLICATION_JSON导出json。

mvn spring-boot:run -Dspring.application.json='{"test.props":"2"}'

或者仅通过-Dtest.props = 2传递属性

mvn spring-boot:run -Dtest.props=2

在Spring Boot 2.1.17和maven 3.6.3上进行了测试