【发布时间】:2016-08-31 08:59:39
【问题描述】:
我有一个带有默认变量值的 application.properties 文件。我希望能够在使用mvn spring-boot:run 运行时更改其中一个。我找到了如何更改整个文件,但我只想更改其中的一两个属性。
【问题讨论】:
标签: java spring spring-boot
我有一个带有默认变量值的 application.properties 文件。我希望能够在使用mvn spring-boot:run 运行时更改其中一个。我找到了如何更改整个文件,但我只想更改其中的一两个属性。
【问题讨论】:
标签: java spring spring-boot
您可以将单个属性作为命令行参数传入。例如,如果你想设置server.port,你可以在启动一个可执行jar时执行以下操作:
java -jar your-app.jar --server.port=8081
或者,如果您在 Spring boot 2.x 中使用 mvn spring-boot:run:
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>
【讨论】:
mvn spring-boot:run时提供了一些选项
org.kohsuke.args4j.CmdLineException: "--server.port=8181" is not a valid option
更新一点,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 插件配置和从 fat jar 传递参数的方式,它没有改变。
所以非常好的安迪威尔金森答案仍然是正确的。
【讨论】:
快速更新:
如果您使用的是最新版本的 spring-boot 2.X 和 maven 3.X,以下命令行将覆盖您的服务器端口:
java -jar -Dserver.port=9999 your_jar_file.jar
【讨论】:
java 可执行文件用于定义系统属性 的语法(可以从System.getProperty() 获得的那种)。除了其他来源之外,Spring 只会抓取这些。
您可以设置一个环境变量来覆盖这些属性。例如,您有一个属性名称 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 上测试
【讨论】:
如果不使用逗号,要在多个模式下覆盖一些自定义属性或 spring boot 属性,请使用空格而不是逗号,如下面的代码:
mvn spring-boot:run -Dspring-boot.run.arguments="--server.port=8899 --your.custom.property=custom"
【讨论】:
在 Spring Boot 中,我们可以覆盖如下属性
mvn spring-boot:run -Dspring-boot.run.arguments=--server.port=8082
【讨论】: