/***文档注释***********************************************
 * 作者               :                   易鑫
 * 创建日期      :                   2017.05.25
 * 描述               :                   数据库连接池代码
 * 注意事项      :                   无
 * 遗留BUG :                   无
 * 修改日期      :                   
 * 修改人员      :                   
 * 修改内容      :                   
***********************************************************/
package market.Com.pb;

import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

import org.apache.commons.dbcp.BasicDataSource;


/**
 * 数据库连接池管理
 * 后续考虑完善，这里暂时丢此处
 * */
public class DBUtilForYLSJ {
	//数据库连接池
	private static BasicDataSource dbcp;
  
	//为不同线程管理连接
	private static ThreadLocal<Connection> tl;
  
	//通过配置文件来获取数据库参数
	static{
		try{
			Properties prop = new Properties();
			InputStream is = DBUtilForYLSJ.class.getClassLoader().getResourceAsStream("db.properties");
			prop.load(is);
			is.close();
      
			//一、初始化连接池
			dbcp = new BasicDataSource();     
      
			//设置驱动 (Class.forName())
			dbcp.setDriverClassName(prop.getProperty("ds2.driver"));
			//设置url
			dbcp.setUrl(prop.getProperty("ds2.url"));
			//设置数据库用户名
			dbcp.setUsername(prop.getProperty("ds2.username"));
			//设置数据库密码
			dbcp.setPassword(prop.getProperty("ds2.password"));
			//初始连接数量
			dbcp.setInitialSize(Integer.parseInt(prop.getProperty("ds2.initialSize")));
			
			//连接池允许的最大连接数
			dbcp.setMaxActive(Integer.parseInt(prop.getProperty("ds2.maxActive")));
			//设置最大等待时间
			dbcp.setMaxWait(Integer.parseInt(prop.getProperty("ds2.maxWait")));
			//设置最小空闲数
			dbcp.setMinIdle(Integer.parseInt(prop.getProperty("ds2.maxIdle")));
			//设置最大空闲数
			dbcp.setMaxIdle(Integer.parseInt(prop.getProperty("ds2.minIdle")));
			
			//初始化线程本地
			tl = new ThreadLocal<Connection>();
		}catch(Exception e){
			e.printStackTrace();
		}
	}
  
	/**
	 * 获取数据库连接
	 * @return
	 * @throws SQLException 
	 */
	public static Connection getConnection() throws SQLException{
		//通过连接池获取一个空闲连接
		Connection conn = dbcp.getConnection();
		tl.set(conn);
		return conn;
	}
  
  
	/**
	 * 关闭数据库连接
	 * 通过连接池获取的Connection的close()方法实际上并没有将
	 * 连接关闭，而是将该连接归还
	 */
	public static void closeConnection(){
		try{
			Connection conn = tl.get();
			if(conn != null){
				conn.close();
				tl.remove();
			}    
		}catch(Exception e){
			e.printStackTrace();
     	}
	}
 
}
