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. console ouput 与 重定向输出 效率对比

    昨天做一个程序的性能测试的时候,由于用了自动化脚本,测试的时候直接把结果(包括执行时间等信息)输出到文件.后来我在调整源代码的时候单独跑了可执行文件,此时结果是输出到控制台(printf).大约100 ...

  2. HTML DOM随笔

    编程接口 所有 HTML 元素被定义为对象,而编程接口则是对象方法和对象属性. 方法是您能够执行的动作(比如添加或修改元素). 属性是您能够获取或设置的值(比如节点的名称或内容). getElemen ...

  3. Struts的文件下载功能实现代码

    Action: package com.tengfeiyang.action; import java.io.File; import java.io.FileInputStream; import ...

  4. lightetreeview

    http://www.16css.com/menu/905.html 其他树形菜单:很好--1.http://www.cnblogs.com/zhhh/archive/2011/11/25/22637 ...

  5. purge mysql自带命令清除binlog

    #!/bin/bash DATAUSER=root DATAPASS=shiyiwen DAY=$1 if [ ! $# == 1 ];then echo -e "\033[32m USAG ...

  6. jquery_插件

    编写插件的目的:给已有的一些列方法或函数做一个封装 jquery插件推荐命名方式 :jquery.[插件名].js  防止与插件库混淆 所有对象方法都应当附加到jquery.fn 对象上,所有的全局函 ...

  7. php中使用while遍历二维数组的方法

    <?php $contact=array( 'gao'=>array('ID'=>1,'name'=>'高某','company'=>'A公司','addr'=>' ...

  8. only for equality comparisons Hash Index Characteristics

    http://dev.mysql.com/doc/refman/5.7/en/index-btree-hash.html Hash Index Characteristics Hash indexes ...

  9. 在Win7系统中搭建Web服务器

    局 域网Web服务器的主要功能是实现资源共享,同时借助于局域网服务器访问页面可有效的实现信息的同步.利用Web服务器,我们随时随地都可以将自己的信息 上传到服务器端,让其它关注你的用户能在第一时间内了 ...

  10. Gradle--ubuntu

    在Ubuntu安装Gradle也是很简单.切记请勿使用apt-get安装Gradle.因为Ubuntu源的Gradle实在太旧.我用的搜狐的源,竟然是2011年. 下面是安装步骤: 1.在官网下载最新 ...