准备的测试配置文件为一个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中的配置(端口)。
该博客探讨了Spring Boot应用中配置文件的加载顺序,特别是yml和properties文件的优先级问题。在示例中,尽管yml配置了端口为30001,并设置了Eureka注册URL,但启动后项目实际使用的端口是properties文件中定义的30002。这是因为properties文件后加载,其配置覆盖了yml中的设置。此外,未启动Eureka服务器导致服务注册失败。代码示例展示了如何从配置文件中读取端口号并在控制器中返回。

被折叠的 条评论
为什么被折叠?



