我在端口8888的localhost上运行了一个spring配置服务器。下面是相关属性文件的一个片段:
server.port=8085
ideal.connection.threshold.millis=600000
listener.port=3042
number.of.backlog.ports=1000我正在尝试从命令行重写这些属性。我试过了--和-D的变体,无论是在.jar之前还是之后,都没有效果。应用程序仍然从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配置服务器中的配置?
发布于 2021-03-15 14:14:22
当使用Spring服务器时,远程配置覆盖系统配置(即:命令行参数被来自配置服务器的远程信任替换)。
若要替换此行为,请将spring.cloud.config.override-system-properties添加到application.properties中的false中。
发布于 2021-03-16 14:33:12
这个问题有一个正确和被接受的答案,我只是想补充一些更多的细节。
官方的Spring文档这里非常混乱和误导。特别地,
通过引导上下文添加到应用程序的属性源通常是“远程”的(例如来自Config Server),并且在默认情况下它们不能在本地被覆盖,除非在命令行上。
显然,除非显式设置配置服务器中的属性,否则不能通过命令行覆盖配置服务器中的属性。
spring.cloud.config.override-system-properties到相关属性文件中的true或false。如果将其设置为false,则只有命令行、环境变量和系统属性才能覆盖这些属性。它被设置为true,然后应用程序的本地配置文件也可以覆盖这些属性。
因此,如果您的应用程序名称是foo,而活动配置文件是bar,那么您的foo-bar.properties应该将spring.cloud.config.override-system-properties设置为true或false。
请注意,诸如应用程序名称、概要文件和云配置(您在引导.*文件中放置的内容)等属性当然可以从命令行中重写。
非常感谢这个github问题,它记录了这个问题。
https://stackoverflow.com/questions/66638110
复制相似问题