哪种方法可以更好地处理连接池?

时间:2013-06-05 15:04:32

标签: jsf-2 connection-pooling h2 managed-bean embedded-jetty

我正在尝试为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();

1 个答案:

答案 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应用程序使用。