Java Spring:从命令行重写一个application.property
我有一个带有默认变量值的application.properties文件。我希望能够在使用Java Spring:从命令行重写一个application.property,java,spring,spring-boot,Java,Spring,Spring Boot,我有一个带有默认变量值的application.properties文件。我希望能够在使用mvn spring boot:run运行时更改其中一个。我找到了如何更改整个文件,但我只想更改其中一个或两个属性 您可以将各个属性作为命令行参数传入。例如,如果要设置server.port,则可以在启动可执行jar时执行以下操作: java -jar your-app.jar --server.port=8081 或者,如果您使用的是mvn spring boot:runwith spring boot
mvn spring boot:run
运行时更改其中一个。我找到了如何更改整个文件,但我只想更改其中一个或两个属性 您可以将各个属性作为命令行参数传入。例如,如果要设置server.port
,则可以在启动可执行jar时执行以下操作:
java -jar your-app.jar --server.port=8081
或者,如果您使用的是mvn spring boot:run
with spring boot 2.x:
mvn spring-boot:run -Dspring-boot.run.arguments="--server.port=8081"
或者,如果您使用的是Spring Boot 1.x:
mvn spring-boot:run -Drun.arguments="--server.port=8081"
您还可以在应用程序的pom.xml
中配置spring boot:run
的参数,这样就不必每次都在命令行上指定它们:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<arguments>
<argument>--server.port=8085</argument>
</arguments>
</configuration>
</plugin>
org.springframework.boot
springbootmaven插件
--server.port=8085
更新一点,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插件配置和从胖jar传递参数的方式,它没有改变。所以安迪·威尔金森的回答仍然是正确的 在Spring Boot中,我们有如下覆盖属性的规定
mvn spring boot:run-Dspring boot.run.arguments=--server.port=8082
如果不使用逗号,要在多模式下覆盖某些自定义属性或spring boot属性,请使用空格而不是逗号,如下代码所示:
mvn spring-boot:run -Dspring-boot.run.arguments="--server.port=8899 --your.custom.property=custom"
快速更新:
如果您使用的是最新版本的spring boot 2.X和maven 3.X,下面的命令行将覆盖您的服务器端口:
java -jar -Dserver.port=9999 your_jar_file.jar
您可以设置一个环境变量来覆盖属性。例如,您有一个属性名
test.props=1
。如果您有一个环境变量TEST\u PROPS
spring boot将自动覆盖它
export TEST_PROPS=2
mvn spring-boot:run
您还可以创建一个json字符串,其中包含需要重写的所有属性,并使用-Dspring.application.json
传递该字符串,或者使用SPRING\u application\u 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
和maven3.6.3@yuli上进行了测试,我编辑了您的问题,并用一些选项更新了我的答案,以便您在使用mvn spring boot:run
I getorg.kohsuke.args4j.CmdLineException:“--server.port=8181”不是有效选项
spring boot不使用args4j,所以失败一定来自你的代码注释:1。参数应以逗号分隔2。每个参数的前缀应为--eg.-Dspring boot.run.arguments=“--server.port=8081,--customArgument=custom”如果该参数是application.properties(如myValue)中的自定义参数,它还会工作吗?酷!。诸如-Dproperty1=value1-Dproperty2=value2之类的系统属性也可以通过mvn spring引导在命令行上传递:run-Dspring boot.run.arguments=“--property1=value1,-property2=value2”不适用于我。如果我输入一个空格,应用程序将不会检测到参数,如果我输入一个空格,SDK将不会读取它。仍然在寻找如何添加application.properties args。他们到底为什么要把它改成这种语法-D