是的,这是可能的。对于这种希望每个线程都有自己的连接的情况,您需要使用
ThreadLocal
,因为每个请求都会生成自己的线程。您只需要确保在请求结束时关闭连接,这是使用
Filter
.
筛选器应位于任何其他筛选器之前,以确保在请求结束时关闭连接。
数据库实用程序:
public class DBUtil {
private static ThreadLocal<Connection> connectionHolder = new ThreadLocal<Connection>();
public static Connection getConnection() {
Connection connection = connectionHolder.get();
if (connection == null) {
connectionHolder.set(connection);
}
return connectionHolder.get();
}
public static void close() {
Connection connection = connectionHolder.get();
if (connection != null) {
connectionHolder.remove();
}
}
}
DB过滤器
:
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
try {
chain.doFilter(request, response);
} finally {
DBUtil.close();
}
}
例如,如果你对这类事情使用一个框架会更好
Spring Framework
已经通过代理您的服务做到了这一点,它处理连接和事务,还为您提供了许多其他功能。