3

我有以下服务:

  1. Spring Cloud 配置服务器
  2. 尤里卡发现服务
  3. 事件服务(spring boot 应用)

我使用“配置优先”模式。这意味着我先启动 Config Server,然后再启动 Discovery Service。

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

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

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

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

但是应用程序无法启动,说8081已经在使用中。似乎事件服务使用来自配置服务器的配置,并且此配置优先于 VM 参数。但我在想它应该是反之亦然。

4

2 回答 2

7

您的命令行参数的顺序是错误的: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

于 2016-10-11T00:18:44.730 回答
1

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

标志以指示何时allowOverride为真,外部属性应具有最低优先级,并且不覆盖任何现有属性源(包括本地配置文件)。默认假。

于 2017-04-05T20:21:33.740 回答