/**
* @date 2019/7/8 9:35
* 管理连接的工具类 用于实现连接和线程的绑定
* 保证当前线程获得的 Connection 是同一个
*/
@Component
public class ConnectionUtils {
private ThreadLocal<Connection> tl=new ThreadLocal<Connection>();
@Autowired
private DataSource dataSource;
public void setDataSource(DataSource dataSource){
this.dataSource = dataSource;
}
// 获得当前线程绑定的连接
public Connection getThreadConnction(){
try {
// 1 看线程是否绑了连接
Connection conn = tl.get();
if(conn==null) {
// 2从数据源获取一个连接
conn= dataSource.getConnection();
//3 和线程局部变量 绑定
tl.set(conn);
}
// 4 返回线程连接
return tl.get();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
// 把连接和当前线程进行解绑
public void remove(){
tl.remove();
}
}