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

运行结果如下:

相关推荐
济*沧*海4 分钟前
如何判断接口的返回值?
后端
糖果店的幽灵7 分钟前
langgraph的四种state解析
java·前端·javascript·langgraph
杨充10 分钟前
5.多用组合和少继承
后端
杨充14 分钟前
4.接口而非实现编程
java·后端·架构
梦梦代码精20 分钟前
基于ThinkPHP6 + Vue3的家政预约系统全解析:从LBS定位到自动派单的完整实现
java·docker·开源·php·代码规范
wear工程师28 分钟前
@Transactional 标了却没开事务?先看这次调用有没有经过代理
java·spring
Joey_friends29 分钟前
指纹authenticate流程图
android·java·c++
一缕清烟在人间33 分钟前
HarmonyOS应用开发实战:萌宠日记 - 生命周期在萌宠日记中的实践
后端
Conan在掘金34 分钟前
鸿蒙 ArkUI 组件深水区:Span 富文本嵌套,一行 Text 塞下「红蓝斜下大」五样式 + 动态高亮
后端
卷无止境35 分钟前
Python 类型注解与运行时反射:从原理到工程实践
后端·python