Java 大佬进!实在弄不明白这个问题了

qclown · 2024-12-8 00:40:44 · 663 次点击
背景: springboot 应用打包成 jar 包运行,读取了依赖 jar 包下的 application.yml 作为应用配置文件。
问题: 不是说好了:Spring Boot 的配置文件加载机制主要关注以下位置:
file:./config/
file:./
classpath:/config/
classpath:/
那为啥 springboot 应用依赖的 jar 包下的 application.yml 也会被当前 sprintboot 应用加载为配置文件。
其他 jar 包下的文件,不应该不算在 classpath:/ 下吧。
实在整不明白了,求助各位大佬。
举报· 663 次点击
登录 注册 站外分享
5 条回复  
ElegantOfKing 小成 2024-12-8 00:52:31
当你在 Spring Boot 应用中依赖某个 Jar 包时,如果这个 Jar 包中包含 application.yml 文件,它也在 classpath 范围内。所以它也会被加载并被视为配置来源之一。 Spring Boot 的 SpringApplication 启动过程中会使用 ConfigFileApplicationListener 加载配置文件,该类的实现会扫描 classpath ,包括依赖的 Jar 包内容。
CLMan 小成 2024-12-8 01:03:54
因为 classpath 有两种格式:文件夹、jar 包,换句话说: 比如`java -classpath /home/root/a.jar`等价于`java -classpath /home/a`,`a`是`a.jar`解压后的根目录。 也就是当你 classpath 指定 jar 包时,等价于 jar 包内的内容位于`classpath:/`下。
CLMan 小成 2024-12-8 01:10:03
@CLMan `java -classpath /home/a`修正为`java -classpath /home/root/a`
qclown 楼主 小成 2024-12-8 01:57:06
@CLMan @ElegantOfKing 感谢两位大佬,之前我理解错了。 我理解类路径是一个树型的目录结构。 但实际上,类路径是一个目录或者 jar 包路径构成的路径列表,列表中的每个目录是一个树型目录结构。 当查找类路径中的资源,比如 / /config 时,是按优先级遍历类路径下的目录,寻找这个目录下的 / /config ,一旦找到了就返回。 所以 classpath:/ 是指所有类路径的根目录,而不是某一个路径(比如当前 jar 里)
ZZ74 小成 2024-12-8 10:15:54
其他 jar 包下的文件,不应该不算在 classpath:/ No ,是算的。
返回顶部