SpringBoot 加载外部资源(yml、jar等)

SpringBoot 加载外部资源(yml、jar等),第1张

由于 SpringBoot 打包后,默认是不能加载外部的jar文件,只能默认加载 yml 文件。

由于SpringBoot 默认启动类是 org.springframework.boot.loader.JarLauncher , 具体看查看打包后的jar 中的 META-INF/xxx/MANIFEST.MF

而 JarLauncher 是无法配置相关外部依赖环境,需要更换为 PropertiesLauncher ,因此需要修改打包配置,增加 layout 与finalName 相关配置,如下:

启动脚本:

执行后即可加载相关文件到 classpath了,如果jar中存在自动装配类,也会自动加载。

https://docs.spring.io/spring-boot/docs/current/reference/html/appendix-executable-jar-format.html#executable-jar-property-launcher-features

Spring对于资源加载有着一套自己的框架——Resource,Resource继承自InputStream。

下面的是Resource的源码:

下面的是Resource的继承图:(这里只是一部分)

那就是Resource的选择,这么多的Resource如何知道选择使用哪一个?Spring提供了一个强大的资源加载机制,,他可以通过前缀标识加载资源,如:classpath, file等,同时还支持使用Ant风格的通配符。

关于classpath:和classpath :前缀。如果有多个JAR包或文件系统路径都拥有同一个相同的包。classpath:只会找到第一个加载的,而classpath :会扫描所有的这些JAR包及类路径下出现的。

Ant风格的资源地址支持三种通配符:

ResourceLoader接口仅有一个getResource(String location)方法,可根据资源地址加载资源。不过,资源地址仅支持带资源类型前缀的表达式,不支持Ant风格的资源路径表达式。ResourcePatternResolver扩展ResourceLoader接口,定义了一个新的接口方法getResources(String locationPatern),该方法支持带资源前缀及Ant风格的资源路径表达式。

在SpringBoot中加载静态资源和在普通的web应用中不太一样。默认情况下,spring Boot从classpath下一个叫/static(/public,/resources或/META-INF/resources)的文件夹或从ServletContext根目录提供静态内容。下面我们来写个例子看一下就会一目了然了:首先看一下项目的目录结构:

我们在resources下面的templates目录下建一个home.html的文件,完整目录为:src/main/resources/templates/home.html。内容如下:

<!DOCTYPE HTML>

<html xmlns:th="http://www.thymeleaf.org">

<head>

<meta charset="utf-8"/>

<title>ConanZhang的首页</title>


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/8132423.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存