import java.io.IOException;

import java.io.InputStream;

import java.util.NoSuchElementException;

import java.util.Properties;

import org.apache.commons.io.IOUtils;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.core.io.DefaultResourceLoader;

import org.springframework.core.io.Resource;

import org.springframework.core.io.ResourceLoader;

/**

* Properties文件载入工具类. 可载入多个properties文件, *相同的属性在最后载入的文件中的值将会覆盖之前的值,但以System的Property优先.

*/

public class PropertiesLoader {

private static Logger logger = LoggerFactory.getLogger(PropertiesLoader.class);

private static ResourceLoader resourceLoader = new DefaultResourceLoader();

private final Properties properties;

public PropertiesLoader(String... resourcesPaths) {

properties = loadProperties(resourcesPaths);

}

public Properties getProperties() {

return properties;

}

/**

* 取出Property,但以System的Property优先,取不到返回空字符串.

*/

private String getValue(String key) {

String systemProperty = System.getProperty(key);

if (systemProperty != null) {

return systemProperty;

}

if (properties.containsKey(key)) {

return properties.getProperty(key);

}

return "";

}

/**

* 取出String类型的Property,但以System的Property优先,如果都为Null则抛出异常.

*/

public String getProperty(String key) {

String value = getValue(key);

if (value == null) {

throw new NoSuchElementException();

}

return value;

}

/**

* 取出String类型的Property,但以System的Property优先.如果都为Null则返回Default值.

*/

public String getProperty(String key, String defaultValue) {

String value = getValue(key);

return value != null ? value : defaultValue;

}

/**

* 取出Integer类型的Property,但以System的Property优先.如果都为Null或内容错误则抛出异常.

*/

public Integer getInteger(String key) {

String value = getValue(key);

if (value == null) {

throw new NoSuchElementException();

}

return Integer.valueOf(value);

}

/**

* 取出Integer类型的Property,但以System的Property优先.如果都为Null则返回Default值,如果内容错误则抛出异常

*/

public Integer getInteger(String key, Integer defaultValue) {

String value = getValue(key);

return value != null ? Integer.valueOf(value) : defaultValue;

}

/**

* 取出Double类型的Property,但以System的Property优先.如果都为Null或内容错误则抛出异常.

*/

public Double getDouble(String key) {

String value = getValue(key);

if (value == null) {

throw new NoSuchElementException();

}

return Double.valueOf(value);

}

/**

* 取出Double类型的Property,但以System的Property优先.如果都为Null则返回Default值,如果内容错误则抛出异常

*/

public Double getDouble(String key, Integer defaultValue) {

String value = getValue(key);

return value != null ? Double.valueOf(value) : defaultValue;

}

/**

* 取出Boolean类型的Property,但以System的Property优先.如果都为Null抛出异常,如果内容不是true/false则返回false.

*/

public Boolean getBoolean(String key) {

String value = getValue(key);

if (value == null) {

throw new NoSuchElementException();

}

return Boolean.valueOf(value);

}

/**

* 取出Boolean类型的Property,但以System的Property优先.如果都为Null则返回Default值,如果内容不为true/false则返回false.

*/

public Boolean getBoolean(String key, boolean defaultValue) {

String value = getValue(key);

return value != null ? Boolean.valueOf(value) : defaultValue;

}

/**

* 载入多个文件, 文件路径使用Spring Resource格式.

*/

private Properties loadProperties(String... resourcesPaths) {

Properties props = new Properties();

for (String location : resourcesPaths) {

logger.debug("Loading properties file from:" + location);

InputStream is = null;

try {

Resource resource = resourceLoader.getResource(location);

is = resource.getInputStream();

props.load(is);

} catch (IOException ex) {

logger.info("Could not load properties from path:" + location + ", " + ex.getMessage());

} finally {

IOUtils.closeQuietly(is);

}

}

return props;

}

}

161216、使用spring的DefaultResourceLoader自定义properties文件加载工具类的更多相关文章

  1. 使用spring的DefaultResourceLoader自定义properties文件加载工具类

    转自:https://www.cnblogs.com/zrbfree/p/6230957.html import java.io.IOException; import java.io.InputSt ...

  2. log4j 日志脱敏处理 + java properties文件加载

    Java 加载Properties 配置文件: ResourceBundle bundle = ResourceBundle.getBundle("log4j_filter"); ...

  3. JAVA中自定义properties文件介绍

    Gradle中的使用 1. 使用gradle.properties buid.gradle 和 gradle.properties可以项目使用,在同一个项目中,build.gradle可以直接获取其同 ...

  4. jdbc.properties不能加载到tomcat项目下面

    javaweb项目的一个坑,每次重启tomcat都不能将项目中的jdbc.properties文件加载到tomcat项目对应的classes目录下面,得手动粘贴到该目录下.

  5. spring入门(二)【加载properties文件】

    在开发过程当中需要用到配置信息,这些信息不能进行硬编码,这时配置文件是一个比较好的方式,java提供了properties格式的文件,以键值对的方式保存信息,在读取的时候通过键获得键对应的值,spri ...

  6. Spring Boot自定义配置与加载

    Spring Boot自定义配置与加载 application.properties主要用来配置数据库连接.日志相关配置等.除了这些配置内容之外,还可以自定义一些配置项,如: my.config.ms ...

  7. spring boot 文件上传工具类(bug 已修改)

    以前的文件上传都是之前前辈写的,现在自己来写一个,大家可以看看,有什么问题可以在评论中提出来. 写的这个文件上传是在spring boot 2.0中测试的,测试了,可以正常上传,下面贴代码 第一步:引 ...

  8. Spring项目中Properties不能加载多个的问题

    A模块和B模块都分别拥有自己的Spring XML配置,并分别拥有自己的配置文件: A模块 A模块的Spring配置文件如下: <?xml version="1.0" enc ...

  9. spring 属性文件加载接口---PropertySourceLoader

    org.springframework.boot.config Interface PropertySourceLoader 实现类: PropertiesPropertySourceLoader, ...

随机推荐

  1. 特殊集合 Stack Queue Hashtable

    //Stack    干草堆集合    栈集合      先进后出 Stack st = new Stack(); //实例化 初始化 st.Push(2); //添加元素 st.Push(6); s ...

  2. Unity3D着色器Shader编程入门(一)

    自学Unity3D也有大半年了,对Shader一直不敢入坑,最近看了些资料,以及通过自己的实践,对Shader还是有一点了解了,分享下仅作入门参考. 因Shader是对图像图像渲染的,学习前可以去了解 ...

  3. Java开发搜索引擎爬虫

    package com.peidon.html; import java.io.BufferedReader; import java.io.File; import java.io.FileOutp ...

  4. 网页mp3播放代码

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. JSCH实现文件上传的代码实例

    package com.vcredit.ddcash.monitor.sendmail; import java.io.File;import java.io.FileInputStream;impo ...

  6. python关于列表转为字典的两个小方法

    1.现在有两个列表,list1 = ['key1','key2','key3']和list2 = ['1','2','3'],把他们转为这样的字典:{'key1':'1','key2':'2','ke ...

  7. Window7 驱动编程环境配置

    1.  安装VS2010,WDK7.60(GRMWDK_EN_7600_1) 2.  新建VC 控制台项目(选择为空项目) 3.  新建项目配置“driver” ,点击下拉按钮-点击(配置管理器) 输 ...

  8. Eclipse Android开发环境搭建

    要点: 1)已经安装配置好eclipse和jdk环境 2)给eclipse安装ADT插件(支持android开发) 3)安装配置android sdk环境(类似jdk) 4)eclipse中配置and ...

  9. Android中Service(服务)详解

    http://blog.csdn.net/ryantang03/article/details/7770939 Android中Service(服务)详解 标签: serviceandroidappl ...

  10. [转]Android View.onMeasure方法的理解

    转自:http://blog.sina.com.cn/s/blog_61fbf8d10100zzoy.html Android View.onMeasure方法的理解 View在屏幕上显示出来要先经过 ...