Spring Eureka 客户端没有从配置文件中看到服务器端口

Spring Eureka Client does not see server port from configuration file

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

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

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 实例包含以下值:

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

原因是:

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

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

有人知道哪里出了问题吗?

原因如下:

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

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

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

小重构后:

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

全部开始工作。

我也遇到了同样的问题

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

我还不能离开@ImportResource。

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

eureka:
  instance:
    non-secure-port: 8088