准备的测试配置文件为一个yml,里面包括了eureka注册url,还有 一个properties,里面只有端口和项目名称。
yml配置如下:
spring:
application:
name: eureka-client
server:
port: 30001
eureka:
client:
serviceUrl:
#注册中心地址
# defaultZone: http://localhost:20000/eureka/
defaultZone: http://peer2:20000/eureka/, http://peer1:20001/eureka/
instance:
#每隔5秒钟就要向注册中心发送一条续约指令
lease-renewal-interval-in-seconds: 5
#如果30秒内,依然没有收到续约请求,判定服务过期
#(服务自保开启时服务剔除会不生效,因为服务自保会确保有客户端连接,哪怕是down掉的)
lease-expiration-duration-in-seconds: 30
properties配置如下:
spring.application.name=eureka-client
server.port=30002
在启动后,会发现项目一直在向eureka注册(由于没有启动eureka-server,一直失败)。而向项目发送请求去读取并返回端口号时,返回的是properties中的端口号。
代码如下:
@RestController
@Slf4j
public class Controller {
@Value("${server.port}")
private String port;
@GetMapping("/sayHi")
public String sayHi(){
return "This is " + port;
}
}
截图如下:
经测试,加载的顺序为yml、properties。在其他文章中,有提到顺序为yml>yaml>properties【1】。先加载的会被后加载的覆盖。
我的理解是,由于yml先加载,在启动时会使用这个配置文件。而Properties后加载,在发送请求、项目读取端口号时,Properties已将yml覆盖,读取的是propertis中的配置(端口)。