我的应用程序使用mysql jdbc连接池。当我通过glassfish管理站点ping数据库时,我收到了很好的回复。当我使用我的应用程序时,一切正常。
出于任何原因,mysql服务器崩溃,我的问题就发生了。崩溃后,我重新启动mysql服务器,当我通过glassfish管理站点ping数据库时,我收到了很好的响应,但是当我使用我的应用程序时,我收到错误。
我正在寻找一种告诉glassfish重建连接的方法。有什么想法吗?
答案 0 :(得分:1)
你可能会在你的应用程序中挂起你的连接,而不是在你完成它们之后立即将它们返回到池中。
答案 1 :(得分:1)
仔细查看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寻找标题:标记不良连接,它大约是页面的三分之二。
答案 2 :(得分:0)
有时GlassFish没有意识到池中的连接不再好。因此,它可能会暂时将关闭的连接发回应用程序(我已经看到这种情况发生了长达20分钟)。
在这种情况下,您可以强制GF关闭旧连接&通过刷新连接池来创建新连接。
来自http://docs.oracle.com/cd/E19798-01/821-1752/giyeb/index.html的摘录。
您可以通过以下方式之一刷新JDBC连接池:
在管理控制台中,打开Resources组件,打开 JDBC组件,选择Connection Pools,然后选择连接 你要冲洗的游泳池。然后选择左上角的Flush按钮 页面的一角。有关详细信息,请单击中的“帮助”按钮 管理控制台。
使用asadmin flush-connection-pool命令。有关详细信息,请参阅 Oracle GlassFish Server 3.0.1参考手册。
另一种选择是在连接池中启用验证。这将迫使GF在将其发送给应用程序之前检查连接是否正常。一旦它意识到连接已关闭,它将用新连接替换它。