来自 Spring 配置服务器的配置覆盖服务器端口 vm 参数

Configuration from Spring Config Server overrides server port vm argument

我有以下服务:

  1. Spring 云配置服务器
  2. 尤里卡发现服务
  3. 事件服务(spring 启动应用程序)

我使用"Config First"模式。这意味着我先启动配置服务器,然后再启动发现服务。

然后我运行事件服务。它从配置服务器获取配置。在配置中我指定 server.port 属性 等于 8081.

我看到我的事件服务正在发现服务中注册。

当我尝试再启动一个事件服务实例时,问题出现了。要在不同的端口上 运行 它,我使用 -Dserver.port vm 参数。所以我的命令看起来像:

java -jar event-service.jar -Dserver.port=8082

但是应用程序启动失败,说8081已经在使用中。似乎事件服务使用来自配置服务器的配置,并且此配置优先于 VM 参数。但是我在想应该是vice-verca

您的命令行参数顺序错误:system variable 必须在 jarfile 之前:

$ java -jar -Dserver.port=8082 event-service.jar

3 种从命令行指定属性的方法

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

请注意,对于 environment variabledots 被替换为 underscores

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

您必须将客户端属性更改为 spring.cloud.config.override-none=true,默认设置为 false。根据文档:

Flag to indicate that when allowOverride is true, external properties should take lowest priority, and not override any existing property sources (including local config files). Default false.