我正在重构其他代码。我注意到的一点是关于系统如何从连接池获取连接的方式。从连接池获取数据库连接
样品是这样的。在每次调用服务方法时,系统都会在数据源的JNDI上进行上下文查找。
public class CheckinServlet extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
//Obtain Connection
InitialContext initialContext = new InitialContext();
javax.sql.DataSource ds = (javax.sql.DataSource) initialContext
.lookup("jdbc/mysqldb");
java.sql.Connection conn = ds.getConnection();
//business logic
//redirect
} finally {
conn.close();
}
}
}
我认为每次都会有这样的表现。我在想如何从连接池中检索连接。
我在考虑使用servlet的init()
方法,但我认为这不是最优的。
嗨,先生,谢谢你总是详细的答案。但有一件事让我想起这件事。为什么将数据源对象作为上下文范围参数放置?不管我们只是让getDataSource()方法是静态的?我非常喜欢这个答案,但我想进一步了解这样做的原因。谢谢.. – 2010-12-21 02:42:42
看到它也很好的设计。一个'DataSource'特定于一个'Config'实例,而不是多个'Config'实例。即使在这种情况下只有一个。 – BalusC 2010-12-21 02:51:13
调用contextDestroyed(ServletContextEvent)时数据库连接是否关闭? – 2011-04-07 15:22:25