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 : ");
    }
}

运行结果如下:

相关推荐
皮皮林5517 小时前
拒绝写重复代码,试试这套开源的 SpringBoot 组件,效率翻倍~
java·spring boot
IT_陈寒10 小时前
Python开发者必知的5大性能陷阱:90%的人都踩过的坑!
前端·人工智能·后端
顺风尿一寸11 小时前
从 Java NIO poll 到 Linux 内核 poll:一次系统调用的完整旅程
java
流浪克拉玛依11 小时前
Go Web 服务限流器实战:从原理到压测验证 --使用 Gin 框架 + Uber Ratelimit / 官方限流器,并通过 Vegeta 进行性能剖析
后端
程途知微11 小时前
JVM运行时数据区各区域作用与溢出原理
java
孟沐11 小时前
保姆级教程:手写三层架构 vs MyBatis-Plus
后端
星浩AI11 小时前
让模型自己写 Skills——从素材到自动生成工作流
人工智能·后端·agent
华仔啊13 小时前
为啥不用 MP 的 saveOrUpdateBatch?MySQL 一条 SQL 批量增改才是最优解
java·后端
武子康14 小时前
大数据-242 离线数仓 - DataX 实战:MySQL 全量/增量导入 HDFS + Hive 分区(离线数仓 ODS
大数据·后端·apache hive
砍材农夫14 小时前
TCP和UDP区别
后端