C3P0Util.java 2.4 KB
/**@author Sherlock_yb
 * Created time:2014年9月19日
 */
package nlp.whu.utils.DB;

import java.io.File;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import org.apache.log4j.Logger;

import com.mchange.v2.c3p0.ComboPooledDataSource;

import nlp.whu.utils.Log4jUtil;

/**@description: 数据库连接工具
 */
public class C3P0Util {
	public static final byte DATA_SOURCE_DOC = 0;
	public static final byte DATA_SOURCE_APP = 1;
	private static final Logger log = Log4jUtil.getInstance().getLogger(C3P0Util.class);
	@SuppressWarnings("unused")
	private static volatile ComboPooledDataSource cpds_doc;
	private static volatile ComboPooledDataSource cpds_app;
	static{
		String curPath = (new File(".")).getAbsolutePath();
		System.setProperty("com.mchange.v2.c3p0.cfg.xml",curPath.substring(0, curPath.length()-1) + "c3p0-config.xml");
	}
	public static Connection getConn(byte dataSource) throws SQLException{
		Connection conn = null;
		switch(dataSource){
		case DATA_SOURCE_DOC: 
//			if(cpds_doc == null){
//				synchronized(C3P0Util.class){
//					if(cpds_doc == null){
//						cpds_doc = new ComboPooledDataSource("doc_server");
//					}
//				}
//			}
//			conn = cpds_doc.getConnection();
			break;
		case DATA_SOURCE_APP: 
			if(cpds_app == null){
				synchronized(C3P0Util.class){    //一个时间内只有一个线程得到执行
					if(cpds_app == null){
						cpds_app = new ComboPooledDataSource("app_server");
					}
				}
			}
			conn = cpds_app.getConnection();
			break;
		default: log.error("no such dataSouce!");
		}
		return conn;
	}
	public static void closeConn(Connection conn){
		if(conn != null){
			try {
				conn.close();
			} catch (SQLException e) {
				log.error("close conn failed", e);
			}
		}
	}
	public static void closeRs(ResultSet rs){
		if(rs != null){
			try {
				rs.close();
			} catch (SQLException e) {
				log.error("close rs failed", e);
			}
		}
	}
	public static void closeStmt(Statement stmt){
		if(stmt != null){
			try {
				stmt.close();
			} catch (SQLException e) {
				log.error("close stmt failed", e);
			}
		}
	}
	public static void main(String[] args){
		Connection conn = null;
		try {
			conn = getConn(DATA_SOURCE_DOC);
		} catch (SQLException e) {
			log.error("get conn failed", e);
		}finally{
			closeConn(conn);
		}
	}
}