Spring: overriding one application.property from command line
JavaSpringSpring BootJava Problem Overview
I have an application.properties file with default variable values. I want to be able to change ONE of them upon running with mvn spring-boot:run
. I found how to change the whole file, but I only want to change one or two of these properties.
Java Solutions
Solution 1 - Java
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>
Solution 2 - Java
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.
Solution 3 - Java
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
Solution 4 - Java
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"
Solution 5 - Java
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
Solution 6 - Java
In Spring Boot we have provision to override properties as below
mvn spring-boot:run -Dspring-boot.run.arguments=--server.port=8082
Solution 7 - Java
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 namedPORT
, 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 namedPORT
, 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.
- For Gradle:
- 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