文档章节

采用单例模式读取xml配置文件xml

街头要饭
 街头要饭
发布于 2015/04/22 17:27
字数 341
阅读 38
收藏 1

1、添加两个包:dom4j-1.6.1.jar、jaxen-1.1-beta-6.jar

2、xml配置

<?xml version="1.0" encoding="UTF-8"?>
<config>
	<db-info>
		<driver-name>com.mysql.jdbc.Driver</driver-name>
		<url>jdbc:mysql://localhost/test</url>
		<username>root</username>
		<password>root</password>
	</db-info>
	<item-dao>com.bjpowernode.drp.basedata.dao.ItemDao4MySqlImpl</item-dao>
	
	</config>

3、代码读取

package com.mysql.coon;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

/**
 * 采用单例模式读取xml配置文件sys-config.xml
 * @author Administrator
 *
 */
public class ConfigReader {

	private static ConfigReader instance = new ConfigReader();
	
	private Document doc;
	
	private JdbcInfo jdbcInfo;
	
	private String itemDaoString;
	
	private ConfigReader() {
		try {
			doc = new SAXReader().read(Thread.currentThread().getContextClassLoader().getResourceAsStream("sys-config.xml"));
			Element driverNameElt = (Element)doc.selectObject("/config/db-info/driver-name");
			Element urlElt = (Element)doc.selectObject("/config/db-info/url");
			Element usernameElt = (Element)doc.selectObject("/config/db-info/username");
			Element passwordElt = (Element)doc.selectObject("/config/db-info/password");
			jdbcInfo = new JdbcInfo();
			jdbcInfo.setDriverName(driverNameElt.getStringValue());
			jdbcInfo.setUrl(urlElt.getStringValue());
			jdbcInfo.setUsername(usernameElt.getStringValue());
			jdbcInfo.setPassword(passwordElt.getStringValue());
			//-------------------------------------------------------------
			Element itemDaoStringElt = (Element)doc.selectObject("/config/item-dao");
			itemDaoString = itemDaoStringElt.getStringValue();
		} catch (DocumentException e) {
			e.printStackTrace();
		}
	}
	
	public static ConfigReader getInstance() {
		return instance;
	}
	
	public JdbcInfo getJdbcInfo() {
		return jdbcInfo;
	}
	
	public String getItemDaoString() {
		return itemDaoString;
	}
	
	public static void main(String[] args) {
		System.out.println(ConfigReader.getInstance().getJdbcInfo().getDriverName());
		System.out.println(ConfigReader.getInstance().getJdbcInfo());
		System.out.println(ConfigReader.getInstance().getItemDaoString());
	}
}

至于为什么要用单例?首先不懂单例是什么的查看我的微博:

http://my.oschina.net/marcello/blog/403983

然后这里讲为什么要用单例;1、因为这个是数据库配置信息,反正用户多次请求,如果用户未释放,这边不会再读取

2、读取的信息会再数据库连接中用到,所以要用单例

如果还是不明白可以咨询qq:648385408 

                             email:laijingkang@163.com

© 著作权归作者所有

街头要饭
粉丝 2
博文 25
码字总数 14470
作品 0
松江
程序员
私信 提问
工作流系统之三十二 设计模式在工作流系统开发中的运用

GoF四人组一共介绍了23种面向对象的设置模式,为每一种特定的实现取了一个名字,根据模式的应用目的不同,将他们分为3类,创建型、结构性和行为型。 面向对象设计三原则: 优先使用组合 针对...

长平狐
2012/10/11
149
0
关于spring是用注解好,还是用xml好?

最近学习了一下java的工厂设计模式,感觉工厂模式最大的优点和spring的IOC有些相像,比如我们为一个User接口写了多个实现,记为:UserImpl1、UserImpl2,可以很轻松的来回切换实现,对于工厂...

上帝爱众生
2015/05/19
518
6
设计模式15——Template Method设计模式

Template Method模板方法设计模式定义一个操作中算法的骨架,将具体步骤的执行延迟到子类中实现。Java中的抽象类就是使用了模板方法设计模式。模板方法设计模式结构如下: 以文档处理为例,T...

小米米儿小
2014/01/24
201
0
从实例出发,了解单例模式和静态块

就算你没有用到过其他的设计模式,但是单例模式你肯定接触过,比如,Spring 中 bean 默认就是单例模式的,所有用到这个 bean 的实例其实都是同一个。 单例模式的使用场景 什么是单例模式呢,...

风的姿态
2018/05/29
0
0
怎么一步步编写简单的PHP的Framework(六)

不好意思,由于最近事情比较多,昨天的确没有时间写,今天刚好还有接近一个小时的时间,所以就继续写一篇。 不知道大家注意到没有,之前我们导入一个配置文件是通过include CONFIGS_PATH . ...

阳光test
2012/11/20
1K
6

没有更多内容

加载失败,请刷新页面

加载更多

skywalking(容器部署)

skywalking(容器部署) 标签(空格分隔): APM [toc] 1. Elasticsearch SkywalkingElasticsearch 5.X(部分功能报错、拓扑图不显示) Skywalking需要Elasticsearch 6.X docker network create......

JUKE
4分钟前
0
0
解决Unable to find a single main class from the following candidates [xxx,xxx]

一、问题描述 1.1 开发环境配置 pom.xml <plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><!--一定要对上springboot版本号,因......

TeddyIH
5分钟前
0
0
Dubbo服务限制大数据传输抛Data length too large: 13055248, max payload: 8388608解决方案

当dubbo服务提供者向消费层传输大数据容量数据时,会受到Dubbo的限制,报类似如下异常: 2019-08-23 11:04:31.711 [ DubboServerHandler-XX.XX.XX.XXX:20880-thread-87] - [ ERROR ] [com.al...

huangkejie
8分钟前
0
0
HashMap和ConcurrentHashMap的区别

为了线程安全,ConcurrentHashMap 引入了一个 “分段锁” 的概念。具体可以理解把一个大的 map 拆分成 N 个小的 Map 。最后再根据 key.hashcode( )来决定放到哪一个 hashmap 中去。 hashmap ...

Garphy
8分钟前
0
0
购买SSL证书需要注意哪些问题

为了保障网站的基本安全,为网站部署SSL证书,已经是一种常态了。各大浏览器对于安装了SSL证书的网站会更友好,并且不会发出“不安全”的提示。部署SSL证书之前首先得去给网站购买一个SSL证书...

安信证书
38分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部