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包,因此第一种是比较通用的做法。

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

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

  • 相关阅读:
    Populating Next Right Pointers in Each Node II
    Populating Next Right Pointers in Each Node
    Construct Binary Tree from Preorder and Inorder Traversal
    Construct Binary Tree from Inorder and Postorder Traversal
    Path Sum
    Symmetric Tree
    Solve Tree Problems Recursively
    632. Smallest Range(priority_queue)
    609. Find Duplicate File in System
    poj3159最短路spfa+邻接表
  • 原文地址:https://www.cnblogs.com/robinjava77/p/5631998.html
Copyright © 2011-2022 走看看