使用全局类通过加载properties文件,读取相关配置以实现代码的优化,以及维护的方便。

在java项目中,我们很多时候需要一些配置参数进行业务的处理、接口的调用等,比如腾讯企业邮箱,需要用的key等一些相对固定的参数,虽然参数不经常改变,但是如果需要改变的话,你需要一个个的去类里面寻找,大大影响维护速度以及效率。

因此,便写了一个全局类 Global以及资源文件加载类PropertiesLoader进行配置的读写。

PropertiesLoader资源文件加载类

package com.crawler.common.utils;

import java.io.IOException;
import java.io.InputStream;
import java.util.NoSuchElementException;
import java.util.Properties;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.core.io.DefaultResourceLoader;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;

/**
 * 资源文件加载类
 * @author siqiangming 2018年4月16日 下午3:43:26
 */
public class PropertiesLoader {
	protected static Log logger = LogFactory.getLog(PropertiesLoader.class);
	private static ResourceLoader resourceLoader = new DefaultResourceLoader();
	private final Properties properties;
	
	/**
	 * 构造函数,初始化对象的时候传递资源文件路径,并加载资源文件
	 * @param resourcesLocations
	 */
	public PropertiesLoader(String... resourcesLocations) {
		properties = loadProperties(resourcesLocations);
	}
	public Properties getProperties() {
		return properties;
	}
	/**
	 * 取出property,以系统property优先,如果系统没有,则去资源文件中取,取不到返回为空
	 * @author siqiangming 2018年4月17日 上午9:30:55
	 * @param key 属性名
	 * @return 属性值
	 */
	private String getValue(String key){
		logger.debug("获取value: " + key);
		String systemProperty = System.getProperty(key);
		if (systemProperty != null) {
			return systemProperty;
		}
		if (properties.containsKey(key)) {
			return properties.getProperty(key);
		}
		return "";
	}
	/**
	 * 取出property,取不到抛出异常
	 * @author siqiangming 2018年4月17日 上午9:35:42
	 * @param key 属性名
	 * @return 属性值
	 */
	public String getProperty(String key){
		logger.debug("获取property: " + key);
		String value = getValue(key);
		if (value == null) {
			throw new NoSuchElementException();
		}
		return value;
	}
	/**
	 * 取出property,取不到返回默认值
	 * @author siqiangming 2018年4月17日 上午9:38:06
	 * @param key 属性名
	 * @param defaultValue 默认值
	 * @return 属性值
	 */
	public String getProperty(String key, String defaultValue){
		String value = getValue(key);
		return value != null ? value : defaultValue;
	}
	/**
	 * 载入资源文件,文件路径使用spring resource格式
	 * @author siqiangming 2018年4月17日 上午9:24:46
	 * @param resourcesLocations 资源文件路径
	 * @return 资源属性集
	 */
	private Properties loadProperties(String... resourcesLocations) {
		Properties prop = new Properties();
		for (String location : resourcesLocations) {
			InputStream in = null;
			try {
				Resource resource = resourceLoader.getResource(location);
				in = resource.getInputStream();
				prop.load(in);
			} catch (IOException e) {
				logger.info("Could not load properties from path:" + location + ", " + e.getMessage());
			} finally {
				if(in != null){
					try {
						in.close();
					} catch (IOException e) {
						logger.info("Could not close InputStream: " + e.getMessage());
					}
				}
			}
		}
		return prop;
	}
}
Global全局类
package com.crawler.common.config;

import java.util.Map;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.crawler.common.utils.PropertiesLoader;
import com.google.common.collect.Maps;

/**
 * 全局类
 * @author siqiangming 2018年4月17日 上午9:04:22
 */
public class Global{
	protected static Log logger = LogFactory.getLog(Global.class);
	/**
	 * 全局map
	 */
	private static Map<String, String> map = Maps.newHashMap();
	/**
	 * 资源文件加载器
	 */
	private static PropertiesLoader loader = new PropertiesLoader("crawler.properties");
	
	/**
	 * 获取配置,如果全局map中没有,获取后放入map
	 * @author siqiangming 2018年4月17日 上午9:41:23
	 * @param key 属性名
	 * @return 属性值
	 */
	public static String getConfig(String key){
		String value = map.get(key);
		if (value == null) {
			value = loader.getProperty(key);
			map.put(key, value != null ? value : "");
		}
		return value;
	}
}

现在我们只需要在资源文件中做下面的配置

##mysql database setting
jdbc.type=mysql
jdbc.driver=com.mysql.jdbc.Driver
#正式环境数据库地址
jdbc.url=jdbc:mysql://192.168.32.175:3306/crawler?useUnicode=true&characterEncoding=utf-8
jdbc.username=root
#正式环境数据库密码
jdbc.password=***

#pool settings
jdbc.pool.init=1
jdbc.pool.minIdle=3
jdbc.pool.maxActive=20
#jdbc.testSql=SELECT 'x'
jdbc.testSql=SELECT 'x' FROM DUAL

##产品信息设置
productName=北京桃花岛爬虫工具
copyrightStartYear=2018
copyrightYear=2022
poweredBy=北京桃花岛信息技术有限公司
version=V1.0

##视图文件存放路径
web.view.prefix=/WEB-INF/views/
web.view.suffix=.jsp

##聚合数据配置
#识别图片验证码应用配置
juhe.appKey=****************************
juhe.codeType=1004
juhe.url=http://op.juhe.cn/vercode/index
juhe.connectTime=30000
juhe.socketTime=30000

现在我们可以用下面的方法直接读取配置了

	@Test
	public void getConfig(){
		String time = Global.getConfig("juhe.connectTime");
		System.out.println("time: "+time);
	}

结果

time: 30000


  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值