利用ThreadLocal存放数据源连接池里的连接

 

import  java.sql.Connection;
import  java.sql.SQLException;

import  javax.naming.Context;
import  javax.naming.InitialContext;
import  javax.naming.NamingException;
import  javax.sql.DataSource;


public   class  ConnectionManager  {
    
private static ThreadLocal<Connection> tl=new ThreadLocal<Connection>();
    
private static Context context;
    
private static DataSource ds;
    
    
static{
        
try {
            context
=new InitialContext();
            ds
=(DataSource) context.lookup("jndiName");
        }
 catch (NamingException e) {
            e.printStackTrace();
            
throw new RuntimeException(e);
        }

    }

    
    
public static Connection getConnection()throws Exception{
        
if(tl.get()==null||tl.get().isClosed()){
            tl.set(ds.getConnection());
        }

        
return tl.get();
    }


    
    
public static void close()throws SQLException{
        tl.get().close();
        tl.set(
null);
    }

    
}

 

每次调用getConnection()获取连接,这样就实现一个线程一个连接。当业务方法都完成的时候调用这个类close方法把Connection放回池中。一个线程享用玩一个连接后,才把连接放回池中,节省了多次从池中放取连接的开销

你可能感兴趣的:(利用ThreadLocal存放数据源连接池里的连接)