glassfish JDBC 连接池

Posted

技术标签:

【中文标题】glassfish JDBC 连接池【英文标题】:glassfish JDBC connection pool 【发布时间】:2011-03-22 15:19:09 【问题描述】:

我的应用程序使用 mysql jdbc 连接池。当我通过 glassfish 管理站点 ping 数据库时,我得到了很好的响应。当我使用我的应用程序时,一切正常。

我的问题发生在 mysql 服务器因任何原因崩溃时。崩溃后,我重新启动了 mysql 服务器,当我通过 glassfish 管理站点 ping 数据库时,我得到了很好的响应,但是当我使用我的应用程序时,我得到了一个错误。

我正在寻找一种方法来告诉 glassfish 重新建立连接。有什么想法吗?

【问题讨论】:

【参考方案1】:

您可能会在应用程序中保留连接,而不是在完成连接后立即将它们返回到池中。

【讨论】:

【参考方案2】:

查看 glassfish 文档,发现以下内容:

com.sun.appserv.jdbc.DataSource ds=
   (com.sun.appserv.jdbc.DataSource)context.lookup("dataSource");
Connection con = ds.getConnection();
Statement stmt = null;
try
   stmt = con.createStatement();
   stmt.executeUpdate("Update");

catch (BadConnectionException e)
   ds.markConnectionAsBad(con) //marking it as bad for removal

finally
   stmt.close();    
   con.close(); //Connection will be destroyed during close.

来自this page 查找标题:标记不良连接,大约在页面下方的三分之二处。

【讨论】:

【参考方案3】:

有时 GlassFish 并没有意识到池中的连接不再好。因此,它可能会在一段时间内将关闭的连接返回给应用程序(我已经看到这种情况长达 20 分钟)。

在这种情况下,您可以强制 GF 关闭旧连接并通过刷新连接池来创建新连接。

来自http://docs.oracle.com/cd/E19798-01/821-1752/giyeb/index.html 的片段。

您可以通过以下方式之一刷新 JDBC 连接池:

在管理控制台中,打开资源组件,打开 JDBC组件,选择Connection Pools,选择连接 您要冲洗的游泳池。然后选择左上角的刷新按钮 页面的一角。有关详细信息,请单击“帮助”按钮 管理控制台。

使用 asadmin flush-connection-pool 命令。有关详细信息,请参阅 Oracle GlassFish Server 3.0.1 参考手册。

另一个选项是在连接池中启用验证。这将迫使 GF 在将其发送给应用程序之前检查连接是否正常工作。一旦它意识到连接已关闭,它将用新连接替换它。

【讨论】:

以上是关于glassfish JDBC 连接池的主要内容,如果未能解决你的问题,请参考以下文章

Glassfish“连接已关闭”错误与连接池、JDBC 和 SQL Server 2008

Glassfish 应用服务器中的 JDBC 和连接池

JDBC连接池设置无法在Glassfish5上运行

在 GlassFish v4.1.1 中创建 jdbc 连接池 [重复]

配置 GlassFish JDBC 连接池以处理 Amazon RDS 多可用区故障转移

Mysql/Glassfish 资源 jdbc 无效