我在glassfish中部署了一个java web应用程序。此应用程序与Mariadb服务器交互。突然,应用程序停止工作。我正在检查app.log和glassfish服务器日志,得到以下结果:
应用程序日志
Could not open JDBC Connection for transaction; nested exception is java.sql.SQLNonTransientConnectionException: Could not send query: Last packet not finished
服务器日志
### The error may exist in file [/opt/glassfish3/glassfish/domains/domain1/applications/exampleApp/WEB-INF/class/model/xml/ParameterMapper.xml]
### The error may involve defaultParameterMap
### The error occurred while setting parameters
### SQL: SELECT NOW();
### Cause: java.sql.SQLNonTransientConnectionException: Could not send query: Last packet not finished
; SQL []; Could not send query: Last packet not finished; nested exception is java.sql.SQLNonTransientConnectionException: Could not send query: Last packet not finished|#]
该应用程序每5分钟重复相同的数据库操作。
我尝试通过glassfish重新加载应用程序,但没有成功。唯一的方法是重新启动服务器,虽然有效,但持续时间不长。
这个案子发生什么事了?或者我能做什么?
答案1
我得到了答案。我所做的就是更改 server.cnf 中的 wait_timeout 参数。该值是 30,我将其更改为默认值 28800。它可以设置为低于 28800,但这是另一个问题。发生的事情是 Java 应用程序每 5 分钟执行几次插入操作,因此由于 wait_timeout,Mariadb 服务器关闭了连接。我想知道数据库连接是单例的,并且应用程序没有验证连接是否已关闭。