Spring: 从命令行重写一个 application.property

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

102862 次浏览

You can pass in individual properties as command-line arguments. For example, if you wanted to set server.port, you could do the following when launching an executable jar:

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

Alternatively, if you're using mvn spring-boot:run with Spring boot 2.x:

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

Or, if you're using Spring Boot 1.x:

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

You can also configure the arguments for spring-boot:run in your application's pom.xml so they don't have to be specified on the command line every time:

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

To update a little things, the Spring boot 1.X Maven plugin relies on the --Drun.arguments Maven user property but the Spring Boot 2.X Maven plugin relies on the -Dspring-boot.run.arguments Maven user property.

So for Spring 2, you need to do :

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

And if you need to pass multiple arguments, you have to use , as separator and never use whitespace between arguments :

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

About the the maven plugin configuration and the way of passing the argument from a fat jar, it didn't change.
So the very good Andy Wilkinson answer is still right.

In Spring Boot we have provision to override properties as below

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

If not working with comma, to override some custom properties or spring boot properties in multiple mode, use whitespace instead of comma, like this code bellow:

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

Quick update:

if you are using the latest versions of spring-boot 2.X and maven 3.X, the below command line will override your server port:

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

You can set an environment variable to orverride the properties. For example, you have an property name test.props=1 . If you have an environment variable TEST_PROPS spring boot will automatically override it.

export TEST_PROPS=2
mvn spring-boot:run

You can also create a json string with all the properties you need to override and pass it with -Dspring.application.json or export the json with SPRING_APPLICATION_JSON.

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

Or just pass the properties with -Dtest.props=2

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

Tested on spring boot 2.1.17 and maven 3.6.3

Running by Gradle:

  • Run in default port(8080): ./gradlew bootRun
  • Run in provided port(8888): ./gradlew bootRun --args='--server.port=8888'
  • If we have any variable in the application.properties file named PORT, run this: PORT=8888 ./gradlew bootRun

Running by Maven:

  • Run in default port(8080): mvnw spring-boot:run
  • Run in provided port(8888): mvnw spring-boot:run -Dspring-boot.run.jvmArguments='-Dserver.port=8085'
  • Run in provided port(8888): mvn spring-boot:run -Dspring-boot.run.arguments='--server.port=8085'
  • Run in provided port(8888) with other custom property: mvn spring-boot:run -Dspring-boot.run.arguments="--server.port=8899 --your.custom.property=custom"
  • If we have any variable in the application.properties file named PORT, run this: SERVER_PORT=9093 mvn spring-boot:run

Using java -jar:

  • Create the .jar file:
    • For Gradle: ./gradlew clean build. We will find the jar file inside: build/libs/ folder.
    • For Maven: mvn clean install. We will find the jar file inside:target folder.
  • Run in default port(8080): java -jar myApplication. jar
  • Run in provided port(8888): java -jar myApplication.jar --port=8888
  • Run in provided port(8888): java -jar -Dserver.port=8888 myApplication.jar
  • Run in provided port(8888) having variable SERVER_PORT in application.properties file: SERVER_PORT=8888 java -jar target/myApplication.jar

If you have the jar file after doing mvn clean install, you can override any property that you have in your application.yml using the double -, like this:

java -jar name_of_your_jar_file.jar --parameter=value

For example, if you need to change your server port when starting you server, you can write the following:

java -jar name_of_your_jar_file.jar --server.port=8888

I Was making a mistake with the syntax of commandline command , while passing command-line arguments, I was wrapping multiple arguments between " " and this was the issue. I simply ran the same command having multiple arguments separated by a space without wraaping them between "" and it worked just fine.

Please note this answer is for cases where we are trying to run this scenario from a jar file(not using mvn).

Correct Command: java -jar myJar.jar --com.arg1=10 --com.arg2=1

Incorrect Command: java -jar myJar.jar "--com.arg1=10 --com.arg2=1"