仿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标 ...
随机推荐
- HDU-4057 Rescue the Rabbit(AC自动机+DP)
Rescue the Rabbit Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- Android循环滑动寻找元素,直接代码
#coding=utf-8from appium import webdriverimport time,unittestclass Android_test(unittest.TestCase): ...
- Thread系列之Thread.Sleep(0)
线程这一概念,可以理解成进程中的一个小单元.这个单元是一个独立的执行单元,但是与进程中的其他线程共享进程中的内存单元. 由于Cpu资源是有限的,所以进程中的多个线程要抢占Cpu,这也导致进程中的多个线 ...
- 【OPENGL】第三篇 着色器基础(二)
在这一小节,主要学习GLSL的基本数据类型以及控制结构.GLSL具备了C++和Java的很多特性,我们会先了解所有着色阶段共有的特性,再了解各个着色器的专属特性. 1.着色器的基本结构 一个着色器程序 ...
- RET2LIBC 练习(3) -- VIRTUALALLOC
国庆假期没事做了几道pwn题练手,等有时间在贴出pwn题的分析. 利用VIRTUALALLOC的方法绕过DEP其实和之前的方法大同小异了,只是VIRTUALALLOC开辟了一段新的可执行的内存空间,然 ...
- Linux-TCP Queue的一些问题
先来回顾下三次握手里面涉及到的问题:1. 当 client 通过 connect 向 server 发出 SYN 包时,client 会维护一个 socket 等待队列,而 server 会维护一个 ...
- GitBook制作电子书详细教程(命令行版)
GitBook 是一款基于 Node.js 开发的开源的工具,可以通过命令行的方式创建电子书项目,再使用 MarkDown 编写电子书内容,然后生成 PDF.ePub.mobi 格式的电子书,或生成一 ...
- 强势回归,Linux blk用实力证明自己并不弱!
Flash的出现把存储的世界搅翻了天,仿佛一夜之间发现了新大陆,所有旧世界的东西都变得笨拙.NVMe驱动义无反顾地抛弃了Linux blk,开发自己的队列管理. 当第一次看到NVMe重新使用Linux ...
- 轨迹记录App是怎样对定位轨迹进行过滤、优化和平滑处理的
https://www.zhihu.com/question/39983016 卡尔曼滤波原理 卡尔曼滤波学习笔记 卡尔曼滤波的原理说明 http://www.cs.unc.edu/~welch/ka ...
- HDU 1754 I Hate It(线段树单点替换+区间最值)
I Hate It [题目链接]I Hate It [题目类型]线段树单点替换+区间最值 &题意: 本题目包含多组测试,请处理到文件结束. 在每个测试的第一行,有两个正整数 N 和 M ( 0 ...