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

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

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

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

  1. java web路径和spring读取配置文件

    此篇博客缘起:部署java web系统到阿里云服务器(ubuntu14.04)的时候,有以下两个问题 找不到自定义的property配置文件 上传图片的时候找不到路径 开发的时候是在windows上的 ...

  2. Spring 读取配置文件(二)

    Spring 读取配置文件并调用 bean package cn.com.test.receive; import org.springframework.beans.factory.annotati ...

  3. Spring 读取配置文件(一)

    注册 @Configuration 标识的类,spring 读取配置文件的时候该类会被自动装载 package cn.com.receive;import org.springframework.be ...

  4. Spring读取配置文件 @Value

    最近在学习Spring如何读取配置文件,记录下方便自己也方便别人: 大致分为两类吧,一种的思路是利用Spring的beanFactoryPostProcessor读取配置文件内容到内存中,也就是应用程 ...

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

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

  6. Java中spring读取配置文件的几种方法

    Spring读取配置XML文件分三步: 一.新建一个Java Bean: package springdemo; public class HelloBean { private String hel ...

  7. spring 读取配置文件

    spring读取dubbo xml文件,在本项目内可以调用正常,一旦把改项目打成jar包,供其他项目调用,就会提示找不到配置文件 ClassPathXmlApplicationContext cont ...

  8. Spring读取配置文件,获取bean的几种方式

    BeanFactory有很多实现类,通常使用 org.springframework.beans.factory.xml.XmlBeanFactory类.但对于大部分J2EE应用而言,推荐使 用App ...

  9. spring读取配置文件PropertyPlaceholderConfigurer类的使用

    这里主要介绍PropertyPlaceholderConfigurer这个类的使用,spring中的该类主要用来读取配置文件并将配置文件中的变量设置到上下文环境中,并进行赋值. 一.此处使用list标 ...

随机推荐

  1. JAVA文件下载功能问题解决日志

    今天给报告系统做了个下载功能,遇到了挺多问题,通过查资料一一解决了. 1.首先遇到的问题是:java后台的输出流输出之后,没有任何报错,浏览器端不弹出保存文件的对话框,原本是ajax请求到后台的con ...

  2. 00 alv抬头等

    *&---------------------------------------------------------------------* *& Report ZHJ_TEST0 ...

  3. 【耐克】【Air Max90 气垫跑鞋】

    [max90 36-44] [加毛冬款 36-44] [黑白百搭款 36-44] [air max90 高帮 冬款 耐看百搭 36-44] [air max90 高帮 40-44] [Air Max9 ...

  4. Sort merge join、Nested loops、Hash join(三种连接类型)

    目前为止,典型的连接类型有3种: Sort merge join(SMJ排序-合并连接):首先生产driving table需要的数据,然后对这些数据按照连接操作关联列进行排序:然后生产probed ...

  5. js生成二维码(jquery自带)

    //引入js<script type="text/javascript" src="js/jquery.js"></script> &l ...

  6. mybatis 与 日志

    如上图所示,mybatis默认支持7种日志记录的方式,也可以自己实现Log接口,然后将实现类通过LogFactory注入到日志工厂中. LogFactory是日志模块的入口,外层通过getLog获取L ...

  7. [PHP] - Laravel - 修改laravel_session的cookie名称

    修改Cookie laravel_session的名称方法: 打开文件:config\session.php 找到值:laravel_session 修改为你所需要的cookie名称即可. 当然,还有 ...

  8. webstorm 运行配置gulp

    打开Run/Debug Configurations,设置

  9. 多表数据连接 Left join

    一个我写的实例:其中多表连接,一共连接了3个表.使用聚集函数SUM,用到了GROUP BY SELECT a.[UserID],b.[Name],sum (c.[Money]+c.[Bank])as  ...

  10. Hibernate5.2之QBC查询

                                                         Hibernate5.2值QBC查询 一.简介  Hibenate的QBC查询个人认为是Hib ...