Spring批量加载Resource目录下的文件

项目中的配置文件用json方式存储在了resources下面的文件夹下面。如下:

在代码里面需要将他们全部读出来。

但是ClassLoader.getResource 只能读取单个文件,不能读取文件列表。然后就想到了 mybatis 同样也是要读配置文件列表,就想看看 mybatis 是怎么做的。然后就找到了Spring 中的 ResourcePatternResolver, 查看了这个类的代码,可以完美解决加载文件列表的问题。

这个类会自动推测要读取的文件的位置,比如在文件夹中还是在压缩包中还是在jar包中。这就很重要,因为最开始是自己实现的扫描文件列表的功能,ide中测试没有问题,但是打包成jar包以后就读取不到了,原因就在于ide测试的时候文件是在target编译目录下,所以读取没有问题,但是一旦打包成jar包就必须从jar包里面读取了,就会读取不到。

代码如下:

java 复制代码
private static final ResourcePatternResolver resourceResolver = new PathMatchingResourcePatternResolver();
private static final String CONFIG_FILE_PATH = "classpath:/device/*.json";

private static void loadDeviceDefineList() {
    try {

        final Resource[] resources = resourceResolver.getResources(CONFIG_FILE_PATH);
        for (Resource resource : resources) {
        	// ...
            final ILinkDeviceFileDef bean = loadDeviceFileDef(resource);
        }
    } catch (Exception e) {
        log.error("Can't load Resource : ");
    }
}

运行结果如下:

相关推荐
SomeB1oody1 分钟前
【Rust中级教程】2.7. API设计原则之灵活性(flexible) Pt.3:借用 vs. 拥有、`Cow`类型、可失败和阻塞的析构函数及解决办法
开发语言·后端·性能优化·rust
LUCIAZZZ3 分钟前
Https解决了Http的哪些问题
java·网络·网络协议·spring·http·rpc·https
larance10 分钟前
Flask 发送邮件
后端·python·flask
Aska_Lv16 分钟前
从零到一写组件库-日志组件库
后端
论迹24 分钟前
【JavaEE】-- 多线程(初阶)2
java·开发语言·java-ee
桃子是唯一的水果33 分钟前
java 单例模式(Lazy Initialization)实现遍历文件夹下所有excel文件且返回其运行时间
java·单例模式·maven
+72035 分钟前
如何在java中用httpclient实现rpc post 请求
java·开发语言·rpc
ybq1951334543137 分钟前
javaEE-SpringBoot日志
java·spring boot·后端
火烧屁屁啦40 分钟前
【JavaEE进阶】图书管理系统 - 贰
java·spring
xzzd_jokelin41 分钟前
Spring AI 接入 DeepSeek:开启智能应用的新篇章
java·人工智能·spring·ai·大模型·rag·deepseek