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

yxyvkwin  于 2022-12-04  发布在  Spring
关注(0)|答案(9)|浏览(125)

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

hfyxw5xn

hfyxw5xn1#

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

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

或者,如果您使用的是带有Sping Boot 2.x的mvn spring-boot:run

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

或者,如果您使用的是Sping 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>
kq4fsx7k

kq4fsx7k2#

为了更新一些东西,Sping 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传递参数的方式,它没有改变。
所以安迪·威尔金森的回答仍然是正确的。

n3h0vuf2

n3h0vuf23#

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

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

z4bn682m4#

您可以设定环境变量来覆写属性。例如,您有一个属性名称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上进行测试

7vhp5slm

7vhp5slm5#

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

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

2cmtqfgy6#

在Sping Boot 中,我们提供了如下覆盖属性
mvn spring-boot:run -Dspring-boot.run.arguments=--server.port=8082

2fjabf4q

2fjabf4q7#

分级跑步:
*在默认端口(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)中运行,该端口在www.example.com文件中具有变量SERVER_PORTapplication.properties:SERVER_PORT=8888 java -jar target/myApplication.jar
2ul0zpep

2ul0zpep8#

如果您在执行mvn全新安装后拥有jar文件,则可以使用双-覆盖应用程序.yml中的任何属性,如下所示:

java -jar name_of_your_jar_file.jar --parameter=value

例如,如果在启动服务器时需要更改服务器端口,则可以编写以下代码:

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

emeijp439#

我在命令行命令的语法上犯了一个错误,在传递命令行参数时,我在““之间 Package 了多个参数,这就是问题所在。我只是运行了同一个命令,其中有多个参数,由空格分隔,而没有在“”之间 Package 它们,它工作得很好。

  • 请注意,此答案适用于尝试从jar文件(不使用mvn)运行此方案的情况。*
    正确的命令:Java -jar我的jar. jar--com.arg1=10 --com.arg2=1
    **不正确的命令:“--com.arg1=10 --com.arg2=1”**请输入您的密码。

相关问题