为了模拟真实场景:一个线程使用自己的连接对象---操作数据库
class DruidJdbcUtils{
//成员变量
private static DataSource ds; //数据源
private static ThreadLocal<Connection> t = new ThreadLocal<>(); //当前线程对象
private DruidJdbcUtils() {}
//静态代码块
static{
//1需要读取连接池的配置文件
//创建属性集合列表
Properties prop = new Properties();
//获取连接池配置文件的所在的输入流对象
InputStream inputStream = DruidUtils.class.getCalssLoader().getResourceAsStream("druid.properties");
//将资源输入流加载到属性列表中
prop.load(inputStream);
//2获取数据源---给成员变量ds的赋值
//使用德鲁伊的工厂
ds=DruidDataSourceFactory.createDataSource(prop);
}
//封装:获取连接对象的功能
Connection conn = t.get();
if(conn == null) {
//当前线程持有对象
//从数据源:连接池中获取
conn = ds.getConnection();
//将连接对象绑定到当前线程中
t.set(conn);
}
return conn;
}
//关闭资源--是否conn对象---close()--->t.remove()解绑;从当前线程中解绑
}