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

clu*_*ser 44 java spring spring-boot

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

And*_*son 62

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

java -jar your-app.jar --server.port=8081
Run Code Online (Sandbox Code Playgroud)

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

mvn spring-boot:run -Drun.arguments="--server.port=8081"
Run Code Online (Sandbox Code Playgroud)

您还可以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>
Run Code Online (Sandbox Code Playgroud)

  • @yhavrysh那你为什么不在你的问题中提到呢?要解决只有你知道的要求是非常困难的 (2认同)
  • @yuli我已经编辑了你的问题,并在你使用`mvn spring-boot:run`时用一些选项更新了我的答案 (2认同)

dav*_*xxx 16

为了更新一些小东西,Spring Boot 1.X Maven 插件依赖于--Drun.argumentsMaven 用户属性,而 Spring Boot 2.X Maven 插件依赖于-Dspring-boot.run.argumentsMaven 用户属性。

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

mvn spring-boot:run -Dspring-boot.run.arguments="--server.port=8081"
Run Code Online (Sandbox Code Playgroud)

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

mvn spring-boot:run -Dspring-boot.run.arguments="--server.port=8081,--foo=bar"
Run Code Online (Sandbox Code Playgroud)

关于 Maven 插件配置和从胖 jar 传递参数的方式,它没有改变。
所以非常好的安迪威尔金森答案仍然是正确的。


ikb*_*mad 10

快速更新:

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

java -jar -Dserver.port=9999   your_jar_file.jar
Run Code Online (Sandbox Code Playgroud)


Sha*_*rup 10

您可以设置环境变量来或覆盖属性。例如,您有一个属性 name test.props=1。如果你有一个环境变量,TEST_PROPSspring boot 会自动覆盖它。

export TEST_PROPS=2
mvn spring-boot:run
Run Code Online (Sandbox Code Playgroud)

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

mvn spring-boot:run -Dspring.application.json='{"test.props":"2"}'
Run Code Online (Sandbox Code Playgroud)

或者只是使用 -Dtest.props=2 传递属性

mvn spring-boot:run -Dtest.props=2
Run Code Online (Sandbox Code Playgroud)

2.1.17在 Spring Boot和 Maven上测试3.6.3


小智 7

如果不使用逗号,要在多种模式下覆盖某些自定义属性或 Spring Boot 属性,请使用空格而不是逗号,如下代码所示:

mvn spring-boot:run -Dspring-boot.run.arguments="--server.port=8899 --your.custom.property=custom"
Run Code Online (Sandbox Code Playgroud)


Md.*_*sen 5

通过 Gradle 运行:

  • 在默认端口(8080)运行: ./gradlew bootRun
  • 在提供的端口(8888)中运行: ./gradlew bootRun --args='--server.port=8888'
  • application.properties如果名为 的文件中有任何变量PORT,请运行以下命令:PORT=8888 ./gradlew bootRun

通过 Maven 运行:

  • 在默认端口(8080)运行: mvnw spring-boot:run
  • 在提供的端口(8888)中运行: mvnw spring-boot:run -Dspring-boot.run.jvmArguments='-Dserver.port=8085'
  • 在提供的端口(8888)中运行: mvn spring-boot:run -Dspring-boot.run.arguments='--server.port=8085'
  • 使用其他自定义属性在提供的端口(8888)中运行: mvn spring-boot:run -Dspring-boot.run.arguments="--server.port=8899 --your.custom.property=custom"
  • application.properties如果名为 的文件中有任何变量PORT,请运行以下命令:SERVER_PORT=9093 mvn spring-boot:run

使用java -jar

  • 创建 .jar 文件:
    • 对于 Gradle:./gradlew clean build. 我们将在:文件夹中找到 jar 文件build/libs/
    • 对于 Maven mvn clean install:. 我们将在:文件夹中找到 jar 文件target
  • 在默认端口(8080)运行: java -jar myApplication. jar
  • 在提供的端口(8888)中运行: java -jar myApplication.jar --port=8888
  • 在提供的端口(8888)中运行: java -jar -Dserver.port=8888 myApplication.jar
  • 在提供的端口(8888)中运行,SERVER_PORT在 application.properties 文件中具有变量: SERVER_PORT=8888 java -jar target/myApplication.jar