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放回池中。一个线程享用玩一个连接后,才把连接放回池中,节省了多次从池中放取连接的开销
458

被折叠的 条评论
为什么被折叠?



