仿Spring读取配置文件实现方案
一、读取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读取配置文件实现方案的更多相关文章
- java web路径和spring读取配置文件
此篇博客缘起:部署java web系统到阿里云服务器(ubuntu14.04)的时候,有以下两个问题 找不到自定义的property配置文件 上传图片的时候找不到路径 开发的时候是在windows上的 ...
- Spring 读取配置文件(二)
Spring 读取配置文件并调用 bean package cn.com.test.receive; import org.springframework.beans.factory.annotati ...
- Spring 读取配置文件(一)
注册 @Configuration 标识的类,spring 读取配置文件的时候该类会被自动装载 package cn.com.receive;import org.springframework.be ...
- Spring读取配置文件 @Value
最近在学习Spring如何读取配置文件,记录下方便自己也方便别人: 大致分为两类吧,一种的思路是利用Spring的beanFactoryPostProcessor读取配置文件内容到内存中,也就是应用程 ...
- Spring读取配置文件的几种方式
import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileReader; imp ...
- Java中spring读取配置文件的几种方法
Spring读取配置XML文件分三步: 一.新建一个Java Bean: package springdemo; public class HelloBean { private String hel ...
- spring 读取配置文件
spring读取dubbo xml文件,在本项目内可以调用正常,一旦把改项目打成jar包,供其他项目调用,就会提示找不到配置文件 ClassPathXmlApplicationContext cont ...
- Spring读取配置文件,获取bean的几种方式
BeanFactory有很多实现类,通常使用 org.springframework.beans.factory.xml.XmlBeanFactory类.但对于大部分J2EE应用而言,推荐使 用App ...
- spring读取配置文件PropertyPlaceholderConfigurer类的使用
这里主要介绍PropertyPlaceholderConfigurer这个类的使用,spring中的该类主要用来读取配置文件并将配置文件中的变量设置到上下文环境中,并进行赋值. 一.此处使用list标 ...
随机推荐
- rails查询mongodb通用查询
ruby on rails 很好的跟mongodb进行了结合,gem包: 地址:https://rubygems.org/gems/mongoid 文档:https://docs.mongodb.co ...
- js判断浏览器,包括Edge浏览器
/* * 描述:判断浏览器信息 * 编写:LittleQiang_w * 日期:2016.1.5 * 版本:V1.1 */ //判断当前浏览类型 function BrowserType() { va ...
- 从网易与淘宝的font-size思考前端设计稿与工作流 (转)
从网易与淘宝的font-size思考前端设计稿与工作流 阅读目录 1. 问题的引出 2. 简单问题简单解决 3. 网易的做法 4. 淘宝的做法 5. 比较网易与淘宝的做法 6. 如何与设计协作 7 ...
- ProcessOn
1.地址:http://www.processon.com/ 2.简介:在线创作流程图.BPMN.UML图.UI界面原型设计.iOS界面原型设计等. 3.优势:无需安装,简单易用.可以替代VISO,学 ...
- 转载:python中的StringIO模块
注意:python3中应使用io.StringIO StringIO经常被用来作为字符串的缓存,应为StringIO有个好处,他的有些接口和文件操作是一致的,也就是说用同样的代码,可以同时当成文件操作 ...
- [Spring MVC] - 从数据库读取MessageSource
Spring MVC中使用MessageSource默认是写在properties文件当中,以支持国际化. 但很多时候我们需要把数据写到数据库当中,而不是在properties文件当中,以方便日常维护 ...
- Ubuntu setup Static IP Address
Change Ubuntu Server from DHCP to a Static IP Address If the Ubuntu Server installer has set your se ...
- B2B商城网站前端开发
最近在时间很忙,在弄一个B2B商城,运用到的easyUI+javaWEB(maven)+JQuery+Scss+JavaScript+其他框架(sea.js模块化等),我负责前端这块:后期的重要的前端 ...
- oracle 11g dbf数据文件从C盘迁移到D盘
服务器系统为 windows 2008 R2 64位,由于C盘空间将满,要将C盘的oracle的DBF数据文件迁移到D盘下,步骤如下: 1.输入cmd,启动 cmd.exe窗口 2.输入 sqlplu ...
- Python 网络编程(一)
Python 网络编程 socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. ...