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

运行结果如下:

相关推荐
代码萌新知24 分钟前
设计模式学习(五)装饰者模式、桥接模式、外观模式
java·学习·设计模式·桥接模式·装饰器模式·外观模式
你的人类朋友2 小时前
【Node】单线程的Node.js为什么可以实现多线程?
前端·后端·node.js
iナナ3 小时前
Spring Web MVC入门
java·前端·网络·后端·spring·mvc
驱动探索者3 小时前
find 命令使用介绍
java·linux·运维·服务器·前端·学习·microsoft
卷Java3 小时前
违规通知功能修改说明
java·数据库·微信小程序·uni-app
CoderYanger3 小时前
优选算法-双指针:2.复写零
java·后端·算法·leetcode·职场和发展
小雨凉如水3 小时前
k8s学习-pod的生命周期
java·学习·kubernetes
李宥小哥4 小时前
C#基础10-结构体和枚举
java·开发语言·c#
领创工作室4 小时前
安卓设备分区作用详解-测试机红米K40
android·java·linux
数据知道4 小时前
Go基础:用Go语言操作MongoDB详解
服务器·开发语言·数据库·后端·mongodb·golang·go语言