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. iOS 程序员 6 级考试(答案和解释)

    iOS 程序员 6 级考试(答案和解释)   我是前言 1. 下面的代码分别输出什么? @implementation Son : Father- (id)init { self = [super i ...

  2. iBatis in 语句参数传入方法

    刚刚开始在工作中用到iBatis 在用到in去查询或者删除 我本来是传递一个String的参数,但是总是报以下的错误

  3. jQuery对象和Dom对象

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

  4. 数位DP HDU3555

    Bomb Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)Total Submi ...

  5. 关于JQuery设置checkbox checked 的问题

    近日做一个关于JQuery表单验证,有一个比较奇葩的要求,即checkbox是为必填项,textbox不是必填的. 而checkbox与textbox又是相关的,填写了textbox,则其上方的che ...

  6. WebApp 里Meta标签大全,webappmeta标签大全

    1.先说说mate标签里的viewport: viewport即可视区域,对于桌面浏览器而言,viewport指的就是除去所有工具栏.状态栏.滚动条等等之后用于看网页的区域.对于传统WEB页面来说,9 ...

  7. centos下安装mysql遇到的问题

    我前边遇到的坎,竟然和这篇百度经验惊人的相似,他帮我大忙了,十分感谢作者啊,连接双手奉上http://jingyan.baidu.com/article/ce436649fec8533773afd38 ...

  8. SpringMVC下的Shiro权限框架的使用

    SpringMVC+Shiro权限管理 博文目录 权限的简单描述 实例表结构及内容及POJO Shiro-pom.xml Shiro-web.xml Shiro-MyShiro-权限认证,登录认证层 ...

  9. 【iCore3双核心板】【4.3寸液晶驱动板爆照!】

     [源代码完全开源,过几天连同硬件一起发布] 花了好久的时间,我们的fpga工程师才完成这液晶模块的驱动代码,其核心价值如下: 1.完全基于fpga驱动,sdram当做缓存: 2.内建双缓冲机制:方便 ...

  10. maven使用本地jar包

    引入本地jar包 方式一:将本地Jar包安装到本地仓库,再按常规方式引用 mvn install:install-file -Dfile=libs\tools.jar -DgroupId=com.su ...