【问题标题】:Spring Eureka Client does not see server port from configuration fileSpring Eureka Client 看不到配置文件中的服务器端口
【发布时间】:2017-07-26 01:46:44
【问题描述】:

我有一个基于 spring-boot 的应用程序,它部署到 jar 中。它有一个maven多模块项目的形式,包含以下部分:

  • 网络
  • 服务
  • 存储库
  • 型号

我的 web 模块需要所有其他模块来构建自己,并在其资源目录中包含以下文件:

  • bootstrap.yml

bootstrap.yml 包含以下配置:

eureka:
  client:
    eureka-server-port: 8761
server:
  port: 8763
  context-path: /foo-service/rest
spring:
  application:
    name: foo-service

所以我希望在唤醒期间它将使用端口 8761 并将自己注册到 Eureka 服务。由于某种原因,当我在以下位置进行调试时:

org.springframework.cloud.netflix.eureka.EurekaClientAutoConfiguration#eurekaInstanceConfigBean

EurekaInstanceConfigBean 的实例包含以下值:

  • instanceId = 172.20.39.197:foo-service:8763
  • nonSecurePort = 8080

奇怪的是 nonSecurePort 设置为 8080 而不是 8763。在我的其他服务(正常工作)中,nonSecurePort 的最后一部分具有相同的值>instanceId。只有在 foo-service 中,价值是不同的。

原因是:

@Value("${server.port:${SERVER_PORT:${PORT:8080}}}")
int nonSecurePort;

找不到配置,返回默认值。但为什么? 我已经检查了由 maven 创建的 foo.jar,并且 bootstrap.yml 是否在正确的位置(BOOT-INF/classes/bootstrap.yml)具有正确的值...

有人知道可能出了什么问题吗?

【问题讨论】:

  • 你能提供一个重现问题的样本吗?
  • 我尝试创建,但所有简单的示例都适合我。只有这样,单一和复杂的应用程序不起作用。当我设法获得更多信息时,立即在这里分享。不过谢谢!

标签: spring-boot spring-cloud netflix-eureka


【解决方案1】:

原因如下:

应用程序仍有一些通过 xml 加载的旧属性:

@Configuration
@ImportResource("some-xml-file") // which loads properties
class FooConfig {}

xml 文件加载的属性没有定义任何端口,因此肯定不是覆盖的情况。然而,似乎以某种方式干扰 Spring-Boot 就足够了。

小重构后:

@Configuration
@PropertySource("properties-file") // loading properties without xml
class FooConfig {}

一切都开始工作了。

【讨论】:

    【解决方案2】:

    我也有同样的问题。

    几个启动应用程序的构建方式完全相同。使用 @ImportResource 的应用程序向 Eureka 注册了不正确的默认端口 8080。

    我还不能离开@ImportResource。

    将以下内容添加到 bootstrap.yml 有效。

    eureka:
      instance:
        non-secure-port: 8088
    

    【讨论】:

      猜你喜欢
      • 2015-04-11
      • 2016-02-15
      • 1970-01-01
      • 1970-01-01
      • 2015-08-31
      • 2018-01-18
      • 2019-07-24
      • 2016-06-20
      • 2019-02-07
      相关资源
      最近更新 更多