一、读取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. Android 基于Android的手机邮件收发(JavaMail)之二( Welcome.java 和 ReceiveAndSend.java )

    周末休息,这次我们继上次内容继续.上一篇内容我们讲述的是一些准备工作.下载两个javamail.jar和activation.jar文件,然后再BuildPath~ 言归正传,为了展示效果,在这里我申 ...

  2. JS实现页面加载完毕之前loading提示效果

    1.获取浏览器页面可见高度和宽度 var _PageHeight = document.documentElement.clientHeight, _PageWidth = document.docu ...

  3. 布隆过滤器的概述及Python实现

    布隆过滤器 布隆过滤器是一种概率空间高效的数据结构.它与hashmap非常相似,用于检索一个元素是否在一个集合中.它在检索元素是否存在时,能很好地取舍空间使用率与误报比例.正是由于这个特性,它被称作概 ...

  4. 用HTML实现凸(凹)起的立体效果的表格

    视觉效果如下: 实现这个效果主要用到的是<table>标签的bordercolorlight和bordercolordark两个属性.不过在测试的过程中,我发现有的浏览器不支持这两个属性, ...

  5. iOS中响应者链条-触摸事件

    总体来说,分2个步骤: 一,从上到下寻找合适的控件来处理这个触摸事件.如下图,如果点击了黄色4,则UIApplication -> UIWindow -> 1白色 -> 2橙色 -& ...

  6. 开源--豆瓣小组UWP,已上架应用商店

    1.前言 豆瓣小组是我和我老婆都比较喜欢的豆瓣家族里面的一款产品.平时加入了一些小组,偶尔打开看下新鲜的帖子,可以打发一下无聊的时间. 豆瓣小组UWP是我前几周在家里开发的一款windows 10应用 ...

  7. 一个前辈对FPGA的理解

    接下来对比一下我原来和现在对于FPG A的认识:原来从单片机转型到FPG A时,并没有摸清这趟河水的深浅,而在不知深浅的情况下,我已经开始下水了.当时我认为FPG A和单片机一样,它是由一个超级经典的 ...

  8. php模式设计之 注册树模式

    在前两篇单例模式和工厂模式后,终于迎来了最后一个基础的设计模式--注册树模式. 什么是注册树模式? 注册树模式当然也叫注册模式,注册器模式.之所以我在这里矫情一下它的名称,是因为我感觉注册树这个名称更 ...

  9. Bootstrap3.0学习第十八轮(JavaScript插件——下拉菜单)

    详情请查看 http://aehyok.com/Blog/Detail/25.html 个人网站地址:aehyok.com QQ 技术群号:206058845,验证码为:aehyok 本文文章链接:h ...

  10. Mac终端命令行提示符格式更改方法

    内容提要: 主要是通过~/.bash_profile文件更改环境变量PS1,修改命令行提示符的显示格式,并展示不同颜色. 本文介绍了默认设置的缺陷,以及需要用到的基础知识,最后介绍了更改命令行提示符格 ...