从命令行重写spring config服务器配置

um6iljoc  于 2021-07-22  发布在  Java
关注(0)|答案(2)|浏览(357)

我在8888端口的localhost上运行了一个spring配置服务器。以下是相关属性文件中的一个片段:

server.port=8085
ideal.connection.threshold.millis=600000
listener.port=3042
number.of.backlog.ports=1000

我正在尝试从命令行重写这些属性。在<application\u name>jar之前和之后,我都尝试过-d变体,但都没有用。应用程序仍然从spring配置服务器获取属性。
我试过的东西

java -Dspring.profiles.active=<profile_name> -Dlistener.port=3034 -Dserver.port=9096-Xmx2048m -jar listener-0.0.1-SNAPSHOT.jar 
java -Dspring.profiles.active=<profile_name> --listener.port=3034 --server.port=9096-Xmx2048m -jar listener-0.0.1-SNAPSHOT.jar 
java -Dspring.profiles.active=<profile_name> -Xmx2048m -jar listener-0.0.1-SNAPSHOT.jar --listener.port=3034 --server.port=9096
java -Dspring.profiles.active=<profile_name> -Xmx2048m -jar listener-0.0.1-SNAPSHOT.jar -Dlistener.port=3034 -Dserver.port=9096

以上方法都不起作用,事实上第二种方法会导致

Unrecognized option: --listener.port=3034

应该的。其他3个选项导致从spring配置服务器获取配置。
所以我的问题是,有没有一种方法可以覆盖spring配置服务器,如果有,那么覆盖spring配置服务器中的配置的正确方法是什么?

f3temu5u

f3temu5u1#

当使用springcloud配置服务器时,远程配置会覆盖系统配置(即:命令行参数被来自配置服务器的远程配置替换)。
若要替换此行为,请添加 spring.cloud.config.override-system-propertiesfalse 在你的 application.properties .

w41d8nur

w41d8nur2#

这个问题有一个正确的答案,我只是想补充一些细节。
这里的官方springcloud配置文档非常混乱和误导。特别地,
通过引导上下文添加到应用程序中的属性源通常是“远程”的(例如,从配置服务器),默认情况下,它们不能在本地被重写,除非在命令行上。
很明显,配置服务器中的属性不能通过命令行重写,除非显式设置该属性 spring.cloud.config.override-system-properties 或者 true 或者 false 在相关属性文件中。如果你把它设成 false ,则只有命令行、环境变量和系统属性才能重写这些属性。设置为 true ,则应用程序的本地配置文件也可以覆盖这些属性。
因此,如果您的应用程序名称是 foo 活动配置文件是 bar ,然后你的 foo-bar.properties 应该有 spring.cloud.config.override-system-properties 设置为 true 或者 false .
请注意,诸如应用程序名称、概要文件和云配置(您放在bootstrap.*文件中的内容)之类的属性当然可以从命令行重写。
非常感谢这个github问题,它记录了这个问题。

相关问题