2016-10-10 82 views
3

我有以下服务:配置覆盖服务器端口VM参数

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

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

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

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

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

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

但应用程序无法启动,称8081已在使用。看起来事件服务使用来自配置服务器的配置,并且此配置优先于VM参数。但我认为它应该是副verca。

+0

必须有东西覆盖项目中的服务器端口。检查你的application.properties。同时检查System.setProperty(“server.port”) – Snickers3192

回答

3

的命令行参数的顺序是错了:system variable必须jar文件之前:

$ 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 variable,将dots替换为underscores

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

0

你必须改变客户属性被设置为false作为默认spring.cloud.config.override-none=true。根据文档:

标志,表示当allowOverride是真实的,外部性应该采取最低优先级,并没有覆盖任何现有 来源财产(包括本地配置文件)。默认为false。