ThreadLocal实现线程单实例
2013-03-31 23:05
357 查看
package com.zjlolife.drp.util; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class ConnectionManager { //ThreadLocal通常是在类中的static字段见API public static ThreadLocal<Connection> threadLocal = new ThreadLocal<Connection>(); public static Connection getConnection() { Connection conn = threadLocal.get(); if(conn==null) { try { JdbcInfo info = ConfigReader.getInstance().getInfo(); Class.forName(info.getDriverName()); conn = DriverManager.getConnection(info.getUrl(), info.getUsername(), info.getPassword()); threadLocal.set(conn); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } return conn; } public static void setAutoCommit(Connection conn,boolean b) { try { conn.setAutoCommit(b); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
加载XML文件的类ConfigReader:
package com.zjlolife.drp.util;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class ConfigReader {
private Document doc;
private JdbcInfo info;
private static String itemDao;
public static ConfigReader instance = new ConfigReader();
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");
info = new JdbcInfo();
info.setDriverName(driverNameElt.getStringValue());
info.setUrl(urlElt.getStringValue());
info.setUsername(usernameElt.getStringValue());
info.setPassword(passwordElt.getStringValue());
Element itemDaoElt = (Element) doc.selectObject("/config/item-dao");
itemDao = itemDaoElt.getStringValue();
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static ConfigReader getInstance() {
return instance;
}
public JdbcInfo getInfo() {
return info;
}
public static String getItemDao() {
return itemDao;
}
public void setItemDao(String itemDao) {
this.itemDao = itemDao;
}
public static void main(String[] args) {
JdbcInfo info = ConfigReader.getInstance().getInfo();
System.out.println(info);
}
}
相关文章推荐
- ThreadLocal实现线程范围的共享变量
- 浅析Java中通过ThreadLocal实现线程绑定来传递参数
- 多线程(三) 实现线程范围内模块之间共享数据及线程间数据独立(ThreadLocal)
- 实现Runnable接口的类+使用Thread类的实例来创建线程---->通过实现Runnable接口来创建线程类
- ThreadLocal 实现线程内共享变量
- 创建线程的两种方式(实现接口的方式请看实例分析5)
- 确保实现Runnable接口的实例在自己的线程中的运行的方法
- C# Singleton 如何实现多线程多实例,每个线程中有且只有一个实例。
- ThreadLocal父子线程传递实现方案
- java-线程-用ThreadLocal类实现线程范围内的数据共享
- ThreadLocal实现线程范围内模块之间共享数据及线程间数据独立
- 多线程同步互斥实例——使用synchronized实现线程通信和互斥
- 多线程(三) 实现线程范围内模块之间共享数据及线程间数据独立(ThreadLocal)
- 多线程 : ThreadLocal 实现线程间共享变量隔离例子
- Java及Python线程实现方式带实例
- Java中实现线程的超时中断方法实例
- 【线程高新】——【ThreadLocal实现线程范围的共享变量】
- java线程实现的两种方式实例
- 1多线程的概述2多线程(创建多个线程实例,并启动多个线程)的实现方式,main主方法是单线程的4多线程的实现方式5多线程模拟火车站售票出现问题7线程的声明周期
- Java基础——ThreadLocal实现线程范围内的数据共享