Spring Eureka Client没有从配置文件

时间:2017-03-06 09:03:00

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

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

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

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

  • 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

在8080而不是8763上设置 nonSecurePort 是多么奇怪。在我的其他服务(正常工作)中, nonSecurePort 实例Id 即可。只有在foo-service中,值才不同。

原因是:

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

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

有人知道可能出现的问题吗?

2 个答案:

答案 0 :(得分:0)

原因如下:

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

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

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

经过小规模的重构:

@Configuration
@PropertySource("properties-file") // loading properties without xml
class FooConfig {}
所有人都开始工作了。

答案 1 :(得分:0)

我有同样的问题。

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

我无法离开@ImportResource。

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

eureka:
  instance:
    non-secure-port: 8088