数据库连接绑定到当前线程
java.lang.ThreadLocal 该类提供了线程局部(thread-local) 变量,用于在当前线程中共享数据。ThreadLocal工具 类底层就是相当于一个Map,key存放的当前线程,value存放需要共享的数据。我们可以把数据库连接池获取的conn,绑定到当前线程里面。
package com.utils;
public class C3P0Utils {
//创建一个C3P0的连接池对象(使用c3p0-config.xml中default-config标签中对应的参数
public static DataSource ds = new ComboPooledDataSource();
//给当前线程绑定 连接
private static ThreadLocal<Connection> local = new ThreadLocal<Connection>();
/**
* 获得一个连接
*/
public static Connection getConnection(){
try {
//#1从当前线程中, 获得已经绑定的连接
Connection conn = local.get();
if(conn == null){
//#2 第一次获得,绑定内容 – 从连接池获得
conn = ds.getConnection();
//#3 将连接存 ThreadLocal
local.set(conn);
return conn;
//获得连接
}
}catch (Exception e) {
//将编译时异常 转换 运行时 , 以后开发中运行时异常使用比较多的。
throw new RuntimeException(e);
}
return null;
}
}

浙公网安备 33010602011771号