java - 休眠 JDBC 连接在几分钟后死机
问题描述
几分钟后,出现此错误。当我执行另一个查询时,它工作正常。
这是错误:
javax.persistence.PersistenceException:org.hibernate.exception.JDBCConnectionException:无法获取 JDBC 连接 org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:149) org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:157) org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1423) Dao.implementation.MessageDaoImp.findAllbyid(MessageDaoImp.java:39) org.apache.jsp.production.Message_jsp._jspService(Message_jsp.java:214) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) javax.servlet.http.HttpServlet.service(HttpServlet.java:741) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:444) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:386) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:330) javax.servlet.http.HttpServlet.service(HttpServlet.java:741) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
这是我的配置文件:
prop.setProperty("hibernate.connection.url", "jdbc:mysql://"+ip+":3306/database?autoReconnect=true");
prop.setProperty("hibernate.connection.username", "user");
prop.setProperty("hibernate.connection.password", "pass");
prop.setProperty("dialect", "org.hibernate.dialect.MySQLDialect");
prop.setProperty("hibernate.c3p0.min_size", "3");
prop.setProperty("hibernate.c3p0.max_size", "100");
prop.setProperty("hibernate.c3p0.timeout", "120");
prop.setProperty("hibernate.c3p0.max_statements", "1000");
prop.setProperty("hibernate.c3p0.idle_test_period", "100");
prop.setProperty("hibernate.c3p0.validate", "true");
prop.setProperty("hibernate.c3p0.acquire_increment", "1");
prop.setProperty("hibernate.c3p0.preferredTestQuery", "select 1;");
解决方案
添加此设置属性
prop.setProperty("hibernate.current_session_context_class", "thread");
并且增加更多的时间
prop.setProperty("hibernate.c3p0.idle_test_period", "3000");
删除此属性
prop.setProperty("hibernate.c3p0.acquire_increment", "1");
prop.setProperty("hibernate.c3p0.preferredTestQuery", "select 1;");
推荐阅读
- c# - C# 有没有办法在一个函数中转换 2 个事件?
- c# - 如何在二进制文件中将 AssemblyVersion 标记为 FileVersion
- python - 使用 Tabula 从 PDF 中将表格作为字符串读取
- angular - 角度 9 的运行错误:严格模式代码可能不包含 with 语句
- javascript - 列表中的信息并显示在地图上
- domain-driven-design - 六边形架构在控制器或服务中聚合
- html - WKWebView 没有响应长按
- php - 如何使用 PHP 检查特定范围内的变量
- python - 遍历列,查找选择,创建新列
- typescript - 仅当用户在指定时间内离线时才发出值