springboot 外配置文件在linux与windows规则不一致

springboot默认配置文件加载循序官方说明上为

  1. 当前项目目录下的一个/config子目录
  2. 当前项目目录
  3. 项目的resources即一个classpath下的/config包
  4. 项目的resources即classpath根路径(root)

那么项目打包为jar包,并且在jar包同级目录放置配置文件的优先级应该大于jar内部的配置文件

外置application.properties
server.port=8888
内置application.properties
server.port=8080
此时通过cmd启动项目
java -jar demo-0.0.1-SNAPSHOT.jar

输出的端口为8888(外部配置文件的端口),在windows和linux下都是同样的结果,说明外部配置文件优先级大于内部,这是正常的,符合预期

但是
重点来了

当内部配置文件application.properties加上了配置文件环境(spring.profiles.active)选择时
server.port=8080
spring.profiles.active=dev

在windows平台下,输出端口为8888
在linux平台下,输出端口却为8080

这说明在linux平台下,外部配置文件失效了,但是在windows下依然有效
有没有谁知道,为什么加了spring.profiles.active以后在Linux下外部配置文件就失效了,但是windows平台依然有效

好像没遇到过这种问题,截图看看你的目录结构呢?

可以试试直接指定配置文件位置
java -jar XXX.jar --spring.config.location=C:\application.yml

1 个赞

也可以在main方法添加额外的配置文件加载路径

String configLocation = String.join(File.separator, "file:${user.home}", "app", "");
System.setProperty(ConfigFileApplicationListener.CONFIG_ADDITIONAL_LOCATION_PROPERTY, configLocation);