我正在尝试为JSF 2.1应用程序实现连接池,该应用程序中嵌入了H2数据库和Jetty 9 Web服务器。我有两个选项来实现h2数据库的连接池。让Jetty为我实现连接池的选项,或者我定义了一个创建连接池的应用程序作用域托管bean。我想知道哪种方法更适合处理连接池?
使用应用程序作用域托管bean的连接池:
JdbcConnectionPool cp = JdbcConnectionPool.create(
"jdbc:h2:~/test", "sa", "sa");
for (String sql : args) {
Connection conn = cp.getConnection();
conn.createStatement().execute(sql);
conn.close();
}
cp.dispose();
答案 0 :(得分:1)
连接池的任何一种方法都可以。有许多连接池实现(每个都有优点和缺点),使用您想要使用的任何内容。
如果您有要执行的语句列表,那么我不会为每个语句打开新连接。相反,执行具有相同连接(和语句)的所有语句:
JdbcConnectionPool cp = JdbcConnectionPool.create(
"jdbc:h2:~/test", "sa", "sa");
...
Connection conn = cp.getConnection();
Statement stat = conn.createStatement();
for (String sql : args) {
stat.execute(sql);
}
conn.close();
...
cp.dispose();
可以启动/停止连接池:
在Web应用程序之外,作为资源(在我看来有点复杂),例如文章"Database Connection Pooling with Tomcat"中所述。您将找到Jetty的类似文档。
使用ServletContextListener(也在H2文档中描述)。在我看来,这有点简单。缺点是连接池不能被多个Web应用程序使用。