java 配置生成工厂类的封装

本文介绍Java中使用Properties类和Apache Commons Configuration库读取properties配置文件的方法。对比两种方式,展示如何利用Apache工具简化配置文件的读取过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    java中关于properties文件(k-v形式描述)的应用是非常多的,java自带的Properties类实现Map接口也提供了一个很好的访问接口。

xxx.properties文件
requestinfo.title=Request Information Example
requestinfo.label.method=Method
requestinfo.label.requesturi=url
requestinfo.label.protocol=http,ftp,smtp
requestinfo.label.pathinfo=/
requestinfo.label.remoteaddr=127.0.0.1
requestinfo.label.isTimeout=false
requestinfo.label.minSpeed=1.4
这种就是以 key = value存在的配置文件。

我们一般如果通过java自带的Properties类读取的话,是用下面的方式

InputStream in = lnew BufferedInputStream(new FileInputStream(name));
Properties p = new Properties();
p.load(in);
String value = p.getProperty(key);
我们通过这种方式来打开操作properties,尽管已经够简单了,但是觉得还是有点不够。


通过查一些资料,发觉apache的commons项目有个关于configuration的工具包。

<dependency>
	<groupId>commons-configuration</groupId>
	<artifactId>commons-configuration</artifactId>
	<version>1.10</version>
</dependency>

这个工具包提供了很多关于配置读取的封装,我们这里只看一下关于properties文件的读取。

    import org.apache.commons.configuration.Configuration;  
    import org.apache.commons.configuration.PropertiesConfiguration;  
      
    Configuration config = new PropertiesConfiguration( "xxx.properties" );  
    float minSpeed = config.getFloat("minSpeed"));  
    List protocol= config.getList("requestinfo.label.protocol")); //自动读取为list,以,分开    
    boolean isTimeout= config.getBoolean("requestinfo.label.isTimeout");  
简单明了的操作,感觉比java自带的properties类要更方便一些。


接下来是自己写的一个简单的工厂类,根据properties的classpath内路径还有文件名获得配置文件对象。

import org.apache.commons.configuration.Configuration;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.PropertiesConfiguration;

import java.net.URL;
import java.util.HashMap;
import java.util.Map;

/**
 * Created with IntelliJ IDEA.
 * User: lsz
 * Date: 14-4-5
 * Time: 下午10:06
 * 根据名字获得对应的配置文件
 */
public class ConfigurationFactory {
    private static String basepath = "/";
    private static Map<String ,Configuration> factory = new HashMap<String, Configuration>();
    private ConfigurationFactory(){}
    public static Configuration getConfiguration(String name,String path) throws ConfigurationException {
        Configuration configuration = factory.get(name);
        if(configuration == null){
            synchronized (basepath){
                if(configuration == null){
                    URL configURL = Configuration.class.getResource( path);
                    configuration = new PropertiesConfiguration(configURL.getPath()+name);
                    factory.put(name,configuration);
                }
            }
        }
        return configuration;
    }
    public static Configuration getConfiguration(String name) throws ConfigurationException {
        return getConfiguration(name,basepath);
    }
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值