我在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配置服务器中的配置的正确方法是什么?
2条答案
按热度按时间f3temu5u1#
当使用springcloud配置服务器时,远程配置会覆盖系统配置(即:命令行参数被来自配置服务器的远程配置替换)。
若要替换此行为,请添加
spring.cloud.config.override-system-properties
至false
在你的application.properties
.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问题,它记录了这个问题。