zoukankan      html  css  js  c++  java
  • 仿Spring读取配置文件实现方案

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

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

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

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

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

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

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

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

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

  • 相关阅读:
    常量的三种定义方式和static在c语言中的三种修饰
    字符串的定义方式;输出和计算长度时的细节
    指针小白:修改*p与p会对相应的地址的变量产生什么影响?各个变量指针的长度为多少?
    习题 :任意输入十个数按大小排序;构造简单数学运算模块(形参和实参)
    for循环简单实例(打印乘法表,打印菱形)
    几个简单if程序的细节比较与加法程序设计
    冒泡排序法,两个数组内容的互换,两个变量之间的交换
    scanf加不加 ?
    jqplot导入包小结
    使用ajax与jqplot的小体会
  • 原文地址:https://www.cnblogs.com/robinjava77/p/5631998.html
Copyright © 2011-2022 走看看