一、读取config和jar里的配置文件,以流的方式返回

 /**
      * 根据路径,获取当前项目中路径(jar包和config文件)下的配置文件
      * @param filePath 存放job配置信息文件的相对路径
      * @return job.xml文件流
      */
     private static List<InputStream> getJobFilesInputStream(String filePath) throws IOException {
         List<InputStream> jobFilesInputStreams = new ArrayList<>();
         ResourcePatternResolver resolver =  new PathMatchingResourcePatternResolver();
         Resource[] resources = resolver.getResources("classpath*:"+ filePath +"/*.xml");
         Map<String,String> fileMap = new HashMap<>();
         for (Resource resource:resources){
             String key = resource.getFilename();
             if(StringUtils.isBlank(fileMap.get(key))){//检查是否已经读取同文件的流
                 jobFilesInputStreams.add(resource.getInputStream());
                 fileMap.put(key,key);
             }
         }
         return jobFilesInputStreams;
     }

二、读取config和jar里的配置文件,以文件对象的方式返回

 /**
      * 根据路径,获取当前项目中路径(jar包和config文件)下的配置文件
      * @param filePath 存放job配置信息文件的相对路径
      * @return job.xml文件对象
      */
     private static List<File> getJobFiles(String filePath) throws IOException {
         List<File> jobFiles = new ArrayList<>();
         ResourcePatternResolver resolver =  new PathMatchingResourcePatternResolver();
         Resource[] resources = resolver.getResources("classpath*:"+ filePath +"/*.xml");
         Map<String,String> fileMap = new HashMap<>();
         for (Resource resource:resources){
             String key = resource.getFilename();
             if(StringUtils.isBlank(fileMap.get(key))){//检查是否已经读取同文件的流
                 jobFiles.add(resource.getFile());
                 fileMap.put(key,key);
             }
         }
         return jobFiles;
     }

三、读取config和jar里的配置文件,以文件路径的方式返回

 /**
      * 根据路径,获取当前项目中路径(jar包和config文件)下的配置文件
      * @param filePath 存放job配置信息文件的相对路径
      * @return job.xml文件路径
      */
     private static List<String> getJobFilesPath(String filePath) throws IOException {
         List<String> jobFilesPath = new ArrayList<>();
         ResourcePatternResolver resolver =  new PathMatchingResourcePatternResolver();
         Resource[] resources = resolver.getResources("classpath*:"+ filePath +"/*.xml");
         Map<String,String> fileMap = new HashMap<>();
         for (Resource resource:resources){
             String key = resource.getFilename();
             if(StringUtils.isBlank(fileMap.get(key))){//检查是否已经读取同文件的流
                 jobFilesPath.add(resource.getFile().getPath());
                 fileMap.put(key,key);
             }
         }
         return jobFilesPath;
     }

经测试:三种方式,都能读取到文件,无论config文件夹下还是jar包里的配置文件。但是因为其他工具类需要配合使用这些配置文件,第二种和第三种不支持配置文件直接打入jar包,因此第一种是比较通用的做法。

第一种有一个地方需要特别注意:流数据只能被消费一次,消费一次后,流中的数据就没有了。

解决方案:成员变量,接收流数据写入内存,每次要用的时候,将这个成员变量数据再转换成流,供其他调用的工具方法进行消费。

仿Spring读取配置文件实现方案的更多相关文章

  1. Spring读取配置文件的几种方式

    import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileReader; imp ...

  2. Spring读取配置文件

    在spring中可以通过下面的方式将配置文件中的项注入到配置中 <bean class="org.springframework.beans.factory.config.Proper ...

  3. java读取配置文件的几种方法

    java读取配置文件的几种方法 原文地址:http://hbcui1984.iteye.com/blog/56496         在现实工作中,我们常常需要保存一些系统配置信息,大家一般都会选择配 ...

  4. spring读取prperties配置文件(2)

    接上篇,spring读取prperties配置文件(1),这一篇主要讲述spring如何用annotation的方式去读取自定义的配置文件. 这里我先定义好属性文件"user.propert ...

  5. spring读取prperties配置文件(1)

    博客地址http://www.cnblogs.com/shizhongtao/p/3438431.html 属性文件命名是*.properties,在java中,用类java.util.Propert ...

  6. java Spring使用配置文件读取jdbc.properties

    Spring使用配置文件读取jdbc.properties 在beans.xml中加入两个必须的bean [html]<bean id="propertyConfigurer" ...

  7. Spring读取xml配置文件的原理与实现

    本篇博文的目录: 一:前言 二:spring的配置文件 三:依赖的第三方库.使用技术.代码布局 四:Document实现 五:获取Element的实现 六:解析Element元素 七:Bean创造器 ...

  8. spring项目读取配置文件

    Spring项目在运用中读取配置文件有两种方式: 通过项目的配置文件读取 在spring-context.xml里面加入以下代码 在运用到的类里面加入 @Value("#{configPro ...

  9. java 4种方式读取配置文件 + 修改配置文件

    版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[-] 方式一采用ServletContext读取读取配置文件的realpath然后通过文件流读取出来 方式二采用ResourceB ...

随机推荐

  1. [课程设计]Scrum 1.5 多鱼点餐系统开发进度

    1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追求完美 4.团队选题:餐厅到店点餐系统WEB 5.Sprint 1时间:11.14-11.23 重案 ...

  2. ios 修改webView字体

    UIFont *font = [UIFont systemFontOfSize:]; //方法一 NSString *fontColor =@"CCCCFF"; NSString ...

  3. Journey Of Code组组员贡献率

    628是该组的组长,前期的主要任务是数据库的设计,中后期加入实现功能模块的工作,实现了文件的上传和解析excel表格的功能,负责协调组员之间的工作和沟通,并且也是最后上台进行演示的人员:所以贡献率有3 ...

  4. Ruiy自我识人做事领悟录ing

    是坑总需要人去踩,谁踩谁收获! 做人做事分层分次,后方能至始及终不乱; 做人做事切记诚记信,宁他人负我,我定不负他人! 做人做事做力求清心寡欲; 安静做工,沉静学道;

  5. Python脚本控制的WebDriver 常用操作 &lt;二十四&gt; 定位frame中的元素

    测试用例场景 处理frame需要用到2个方法,分别是switch_to_frame(name_or_id_or_frame_element)和switch_to_default_content() 如 ...

  6. Base64 编码

    Base64 字母表 Base64 编码将一个 8 位字节序列拆成 6 位的片段,并为每个 6 位的片段分配一个字符,这个字符是 Base64 字母表中的 64 个字符之一. Wert Zeichen ...

  7. 关于DPC和workitem的简单用法

    这个随笔是记录我半个月左右的时间,从想法到查资料请教,以及到实践的成果. 我想实现的是,隔定时时间写文件,本以为调用写的函数就可以实现了,结果各种BSOD,IRQL_NOT_LESS_OR_EQUAL ...

  8. 【转】C++:在程序中获取全球唯一标识号(GUID或UUID)

    Windows:使用CoCreateGuid函数(GUID) #include <objbase.h> #include <stdio.h> #define GUID_LEN ...

  9. 以O2O为核心的ERP思考

    O2O已经火了一阵子了,很多人都在说O2O,各行各业都想和O2O有所结合,都认为这里面将会有巨大的商机. 在互联网发展到移动互联网的时代,我们的生活的很多方面已经被改变了,很多事情都已经可以在移动端完 ...

  10. (转载)50个c/c++源代码网站

    C/C++是最主要的编程语言.这里列出了50名优秀网站和网页清单,这些网站提供c/c++源代码.这份清单提供了源代码的链接以及它们的小说明.我已 尽力包括最佳的C/C++源代码的网站.这不是一个完整的 ...