用单例模式来搞定配置文件
来源:互联网 发布:数控机床入门编程技术 编辑:程序博客网 时间:2024/06/07 02:58
在上篇文章中步步剖析单例模式我们已经剖析了单例模式,在文章的最后中说到,单例模式在读取配置文件的时候比较适用,接下来的内容便是通过具体的代码来展示如何在一个项目中的读取配置文件中适用单例模式.
在接下来的文章将会介绍如何通过单例模式来读取配置文件.
在DRP项目中便是通过单例模式对配置文件进行读取,下面将整个的例子通过代码展现出来.
JdbcConfig类(Jdbc配置类,配置相关读取数据库的信息)
package com.bjpowernode.drp.util;/** * jdbc配置信息 * @author jnqqls * */public class JdbcConfig {//重写Object的toString方法@Overridepublic String toString() {return this.getClass().getName()+ "{drivarName:" + driverName + ",url:"+url + ",usernName:" +userName;}//驱动名称private String driverName;//地址private String url;//用户名private String userName;//密码private String passWord;public String getDriverName() {return driverName;}public void setDriverName(String driverName) {this.driverName = driverName;}public String getUrl() {return url;}public void setUrl(String url) {this.url = url;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public String getPassWord() {return passWord;}public void setPassWord(String passWord) {this.passWord = passWord;}}
数据库配置文件:sys-conf.xml(配置连接数据库相关信息)
<?xml version="1.0" encoding="UTF-8"?><config><db-info><driver-name>oracle.jdbc.driver.OracleDriver</driver-name><url>jdbc:oracle:thin:@localhost:1521:orcl</url><username>drp1</username><password>drp1</password></db-info></config>
XmlConfigReader类:采用单例模式解析XML配置文件.
package com.bjpowernode.drp.util;import java.io.InputStream;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom4j.io.SAXReader;/** * 采用单例模式解析XML配置文件 * @author jnqqls * */public class XmlConfigReader {//单例模式-懒汉式(真正使用的时候实例化<延迟加载>)private static XmlConfigReader instance =null;//保存jdbc相关配置信息private JdbcConfig jdbcConfig = new JdbcConfig();//私有构造器,通过SAXReader的方式读取配置文件sys-config.xml文件中的数据库信息.private XmlConfigReader(){// 使用SAXReader的方式读取XMLSAXReader reader = new SAXReader();//通过当前线程装载文件配置文件 InputStream in=Thread.currentThread().getContextClassLoader().getResourceAsStream("sys-conf.xml");try {//将配置文件装载到Document对象中Document doc = reader.read(in);/** * 采用Xpath方式获取配置文件中的相关信息 *///取得jdbc相关配置信息.Element driverName = (Element)doc.selectObject("/config/db-info/driver-name");Element url = (Element)doc.selectObject("/config/db-info/url");Element passWord = (Element)doc.selectObject("/config/db-info/password");Element userName = (Element)doc.selectObject("/config/db-info/username"); //将从xml获取的配置信息写入jdbcConfig实例中jdbcConfig.setDriverName(driverName.getStringValue());jdbcConfig.setPassWord(passWord.getStringValue());jdbcConfig.setUrl(url.getStringValue());jdbcConfig.setUserName(userName.getStringValue());System.out.println("读取jdbcConfig-->>"+jdbcConfig);} catch (DocumentException e) {e.printStackTrace();} }//公共的静态的入口方法//为了防止多线程多个对象保证单例,添加同步关键字synchronized.public static synchronized XmlConfigReader getInstance(){//判断是否实例化?if (instance == null){instance = new XmlConfigReader();}return instance;}/** * 返回jdbc相关配置 * @return */public JdbcConfig getJdbcConfig(){return jdbcConfig;}/** * 测试是否成功读取相关配置信息. * @param args */public static void main(String[] args){JdbcConfig jdbcConfig =XmlConfigReader.getInstance().getJdbcConfig();System.out.println(jdbcConfig.getDriverName());System.out.println(jdbcConfig.getPassWord());System.out.println(jdbcConfig.getUrl());System.out.println(jdbcConfig.getUserName());System.out.println(jdbcConfig);}}
测试结果:
读取jdbcConfig-->>com.bjpowernode.drp.util.JdbcConfig{drivarName:oracle.jdbc.driver.OracleDriver,url:jdbc:oracle:thin:@localhost:1521:orcl,usernName:drp1oracle.jdbc.driver.OracleDriverdrp1jdbc:oracle:thin:@localhost:1521:orcldrp1com.bjpowernode.drp.util.JdbcConfig{drivarName:oracle.jdbc.driver.OracleDriver,url:jdbc:oracle:thin:@localhost:1521:orcl,usernName:drp1
小结:在DRP项目中,该数据库的配置信息存放在一个XML文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息。这种方式简化了在复杂环境下的配置管理。同时也应该注意,单例模式在多线程的应用场合下必须小心使用。如果当唯一实例尚未创建时,有两个线程同时调用创建方法,那么它们同时没有检测到唯一实例的存在,从而同时各自创建了一个实例,这样就有两个实例被构造出来,从而违反了单例模式中实例唯一的原则。
- 用单例模式来搞定配置文件
- 使用X-UA-Compatible来搞定IE浏览器兼容模式
- 工厂模式(使用配置文件来确定具体的实例)
- 利用“工厂模式+反射+配置文件”来实现解耦和
- UISearchBar控件-让我们来搞定!
- UISearchBar控件-让我们来搞定!
- UISearchBar控件-让我们来搞定!
- Android基于配置文件的测试模式(不修改代码通过配置文件来打开和关闭测试模式)
- 修改配置文件,轻松搞定Form验证问题
- 2006_11_2搞定映射模式
- 三句话搞定适配器模式
- 来w3c轻松搞定各种脚本
- 用Dynagen来保存配置文件
- 用Dynagen来保存配置文件
- 彻底搞定用Xdoclet生成Hibernate所有配置文件
- 单例设计模式中使用dom4j来完成(数据库配置文件)xml的解析,并完成数据库的连接
- 一篇文章搞定Java工厂模式
- 快速搞定php单例模式
- 传统软件的云计算之路
- struts2中国际化!!
- live achive 5987 - Distinct Primes
- 如何将用户变成产品布道者
- UIView的生命周期 init、loadView、viewDidLoad、viewDidUnload、dealloc
- 用单例模式来搞定配置文件
- 研究称在家中工作可提高员工工作效率
- Cassandra数据模型
- 百度世界2012大会:百度云“七种武器”详解
- Java基础:三步学会Java Socket编程
- 远程连接Oracle数据库管理系统信息
- 入乡随俗:ASP.NET的本地化(Localization)简介
- 如果Oracle是64bit的Oracle,使用32bit的PL/SQL会发生错误
- VC 2008编译libxml2-2.7.6