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