spring boot 中的 classpath 和 classpath* 有什么区别?

当我使用 spring boot 横幅配置文件时,我发现:

有用:

spring.banner.location=classpath:banner.txt

不工作:

spring.banner.location=classpath*:banner.txt

那么 classpath: 和 classpath*: 之间有什么区别?


慕仙森
浏览 113回答 2
2回答

UYOU

来自 Spring 文档通配符类路径依赖于底层类加载器的 getResources() 方法。由于现在大多数应用程序服务器都提供自己的类加载器实现,因此行为可能会有所不同,尤其是在处理 jar 文件时。检查 classpath* 是否有效的一个简单测试是使用类加载器从类路径上的 jar 中加载文件:getClass().getClassLoader().getResources("")。尝试使用具有相同名称但位于两个不同位置的文件进行此测试。如果返回不适当的结果,请检查应用程序服务器文档以获取可能影响类加载器行为的设置。所以classPath是为了从当前类加载器加载资源(只是为了理解不会读取jar或其他项目依赖下的资源)classpath* 将做 jar 或其他类加载器资源。

达令说

首先是Spring boot在源码中显示banner。可以在SpringApplication.class中找到代码,printBanner方法是用来显示banner的。就像mallikarjun说的classPath是从当前类加载器中加载资源(简单理解下不会读取资源) jar 或其他项目依赖项)classpath* 将执行 jar 或其他类加载器资源。如果你使用 classpath*:banner.txt 会在 jar 中找到。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java