来自Spring Config Server的配置覆盖了服务器端口VM参数

3
我有以下服务:
  1. Spring Cloud Config Server
  2. Eureka Discovery Service
  3. Event Service (spring boot app)
我使用“配置优先”模式。这意味着我首先启动Config Server,然后启动Discovery Service。
然后我运行事件服务。它从Config Server获取配置。在配置中,我将server.port属性设置为8081。
我看到我的事件服务已在发现服务中注册。
问题出现在我试图启动另一个事件服务实例时。为了在不同的端口上运行它,我使用-Dserver.port vm参数。因此,我的命令如下: java -jar event-service.jar -Dserver.port=8082 但应用程序无法启动,说8081已经在使用中。似乎事件服务使用了来自配置服务器的配置,并且此配置优先于VM参数。但是我认为应该相反。

您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Derrops
2个回答

7
您的命令行参数顺序有误:必须先放置 系统变量 再放置 jar 文件。
$ java -jar -Dserver.port=8082 event-service.jar

命令行指定属性的三种方法

  • 环境变量:$ server_port=8082 java -jar event-service.jar
  • 系统变量:$ java -jar -Dserver.port=8082 event-service.jar
  • 命令行参数:$ java -jar event-service.jar --server.port=8082

需要注意的是,对于环境变量会被替换为下划线

来源:https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html


1
你需要更改客户端属性为spring.cloud.config.override-none=true,默认情况下设置为false。根据文档:

标志表示当allowOverride为true时,外部属性应该具有最低优先级,并且不应覆盖任何现有的属性源(包括本地配置文件)。默认值为false。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接