数据库连接绑定到当前线程

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;
    }
}

 

posted @ 2020-07-30 11:12  *乐途*  阅读(555)  评论(0)    收藏  举报