`
Jcat
  • 浏览: 50646 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Grails连MySQL - 连接池超时问题

阅读更多
问题表象
上线后的Grails应用,第二天,第一次登陆总是提示密码错误,再登陆一下就能成功。

推测倒是很准确
肯定是Tomcat或MySQL的某处超时设置导致的

准确诊断
因为无法在开发环境下模拟问题,先想办法在服务器端记录日志
Grails集成了log4j,用起来超级简单,而且还支持“环境”选项。

log4j = {
    appenders {
        environments {
            production {
                file name: 'file', file: '/home/jcat/myoalog/myoa.log'
            }
            development {
                file name: 'file', file: 'c:\\myoa.log'
            }
        }
    }

    root {
        info 'stdout', 'file'
    }

    info 'grails.app', 'myoa.StaticFilter'
}


然后在日志中发现了问题(这个log并不是我设计的,而是Shiro框架源码里的,可见人家是专业的)
2013-05-20 16:12:45,582 [http-bio-8080-exec-40] ERROR util.JDBCExceptionReporter  - The last packet successfully received from the server was 282,966,727 milliseconds ago.  The last packet sent successfully to the server was 282,966,728 milliseconds ago. is longer than the server configured value of 'wait_timeout'. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property 'autoReconnect=true' to avoid this problem.

2013-05-20 16:12:45,601 [http-bio-8080-exec-40] INFO  app.realm  - Unable to authenticate with myoa.DbRealm - could not execute query; nested exception is org.hibernate.exception.JDBCConnectionException: could not execute query

模拟错误
mysql> show global variables like 'wait_timeout';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| wait_timeout  | 28800 |
+---------------+-------+
1 row in set (0.00 sec)


--重启后失效
set global wait_timeout=60;  --60秒

--需要停机配置
cat /etc/my.cnf
[mysqld]
wait_timeout=60

有趣的是,连接池超时后,登录后的浏览器会话并不会超时,所以第一次刷新会报错,再刷新(并不需要登录)就正常工作了。

最终解决
有3个途径
1. 调大MySQL的timout时间,网上说,最大到21天左右
2. 修改Hibernate的连接池组件,采用更高级的c3p0  http://blog.csdn.net/nethibernate/article/details/6658855
3. 修改默认的DBCP连接池的配置
http://www.netingcn.com/dbcp-config.html
http://sacharya.com/grails-dbcp-stale-connections

【法1-推荐】
        dataSource {   
          //解决数据库连接池长期不用超时的问题
            properties {
                timeBetweenEvictionRunsMillis = 1000 * 60 * 60 * 3  //每3小时检查一次
                minEvictableIdleTimeMillis = 1000 * 60 * 60 * 3     //把超过3小时的空闲连接激活一次
                //这样最差的情况,一个连接最多空闲6小时,而MySQL配置的是8小时断开
            }
        }


【法2-这会导致从连接池拿连接之前都会执行一次select 1语句】
                testOnBorrow = true
                testWhileIdle = false
                testOnReturn = false
                validationQuery = "SELECT 1"
分享到:
评论

相关推荐

    TopN问题分析和单元实践练习

    TopN问题分析和单元实践练习

    计算机科学_调试技术_GDB入门_高质量指南_1741864597.zip

    操作系统学习

    全套人工智能学习教程.zip

    01人工智能学习前言 02文字朗读 03文字翻译 04语音识别 05超级翻译官 06专家系统 07视觉识别01初探 08视觉识别02人脸追踪 09视觉识别03人脸检测 10视觉识别04特定人脸辨认 11视觉识别05识别车牌 12视觉识别06识别印刷体文字

    虚幻引擎深度开发实践:次世代实时交互系统的架构设计与性能调优

    虚幻引擎深度开发实践:次世代实时交互系统的架构设计与性能调优

    基于springboot框架的高校教师科研管理系统的设计与实现(Java项目编程实战+完整源码+毕设文档+sql文件+学习练手好项目).zip

    社会发展日新月异,用计算机应用实现数据管理功能已经算是很完善的了,但是随着移动互联网的到来,处理信息不再受制于地理位置的限制,处理信息及时高效,备受人们的喜爱。本次开发一套高校教师科研管理系统有管理员,教师,学院三个角色。管理员功能有个人中心,教师管理,学院管理,科研课题管理,软件著作权管理,论文信息管理,专利信息管理,科研成果管理,科研课题校审管理,著作权校审管理,论文校审管理,专利校审管理,科研成果校审管理。教师和学院都可以注册登录,教师可以提交科研课题,软件著作权,论文信息,专利信息,科研成果信息,学院主要审核教师提交的一切信息。高校教师科研管理系统服务端用Java开发,用Spring Boot框架开发的网站后台,数据库用到了MySQL数据库作为数据的存储。这样就让用户用着方便快捷,都通过同一个后台进行业务处理,而后台又可以根据并发量做好部署,用硬件和软件进行协作,满足于数据的交互式处理,让用户的数据存储更安全,得到数据更方便。 关键字:高校教师科研管理系统;Spring Boot框架;Java;MySQL

    知识图谱_BERT模型_实体识别_问答系统框架搭建用途_1741866054.zip

    操作系统学习

    软件工程领域中的系统需求说明文档模板:结构化与标准化

    内容概要:文档主要介绍了一种详细的系统需求说明书模版,涵盖项目的多个重要组成部分,如系统概述、功能需求、安全性和性能需求等方面。每个部分都进行了详细地说明与规范。其中包括对业务描述及需求分析,系统的目标及角色,页面定义与页面间的流转,报表的设计及其需求详述,系统间的数据交换方法和对各种环境的要求及安全性考虑。文档提供了清晰的内容布局,有助于理解和实施特定任务或项目。同时文档还包括了详细的表格格式用于指导功能的具体表述。 适合人群:适用于参与项目的管理人员和技术开发团队成员,在项目早期阶段,通过这份文档,可以使所有相关人员清楚了解到该项目的技术要求和预期成果,以确保后续开发工作的顺利开展。 使用场景及目标:适用于需要创建复杂IT系统的团队,在制定详细需求说明时以此作为蓝图。这不仅可以帮助建立有效的项目管理规划,同时也保证了项目交付时的可靠性和稳定性。 其他说明:这份模版旨在提高工作效率并减少重复劳动,鼓励使用者在此基础上进一步定制和完善自身的工作流程。

    Swift-Button封装

    Swift-Button封装

    数据结构_算法_C语言_基础实现库_1741871185.zip

    数据结构学习

    软件工程:项目开发流程与角色职责规范确保高效协作与交付

    内容概要:本文档主要围绕项目开发流程管理展开,旨在优化各个职能角色(包括产品经理、交互设计师、UI设计师、开发人员、前端工程师和测试人员)之间的协作效率并规范各自职责。通过明确规定各项任务的责任归属以及所需产生的具体成果(比如:需求文档、交互设计稿、效果图和API文档等),从而减少误解导致的反复工作,提高沟通效率及确保每个环节所形成的内容都能够成为后续工作的依据而非事后补录。此外,该指南还提供了当特定职位缺席时替代方案和跨部门协作时需要注意事项的具体指示。 适合人群:适用于希望提升团队协作水平和管理效能的技术团队领导、项目经理或者企业内部的IT相关部门。 使用场景及目标:为正在实施新系统的组织提供了一个详尽而实用的指导方针;帮助团队更好地规划和执行从初步调研直到最终发布的完整周期;明确了各个环节负责人应当完成的任务清单,使各方能够更加专注于自己的专业技能发挥而不必担心由于衔接不当所带来的额外工作量;同时也便于客户实时跟踪项目的最新状态以便做出相应决策支持。 其他说明:本规范强调了在整个过程中对于重要输出物如文档记录的重要性,鼓励所有参与者共同参与决策过程并且保持信息共享以保证整个项目的

    PHP语言教程,语法,入门教程

    PHP语言教程,语法,入门教程

    量化投资_Backtrader_教程_知识分享_1741870154.zip

    数据结构学习

    adb调试桥安装包,移动端和PC的桥梁

    adb调试桥安装包,移动端和PC的桥梁

    yangchong211_YCBlogs_1741873748.zip

    数据结构学习

    MPU6000andMPU6050产品和数据手册

    MPU6000andMPU6050产品和数据手册

    软件测试领域:全面解析文件上传下载测试用例

    内容概要:本文详细介绍了针对文件上传下载的功能性和非功能性测试用例设计方法。主要内容包括针对上传文件的不同类型(jpg/gifs等格式)、不同尺寸以及特殊情形,如零字节文件或使用中文件的上传测试案例;导出测试方面则聚焦于文件名的合法性检测、导出内容的一致性以及在极端情况如满盘状态下的行为验证等方面的具体措施。此外,还提供了具体页面、按钮和功能测试的关键关注点和测试标准,强调测试覆盖到每一个环节,确保系统的稳定性和易用性。 适合人群:从事质量保证工作的专业人员,尤其适用于具有一定软件测试经验的技术人员。 使用场景及目标:①用于指导QA团队建立和完善产品文件操作模块的测试计划,提高产品质量;②帮助企业制定有效的测试方案以评估第三方组件的安全性和兼容性。 其他说明:除了传统测试要点外,本文也涉及了安全性方面的考量(例如防止恶意文件注入)和用户体验(如界面友好性)。这有助于构建既安全又便捷的Web应用程序和服务平台,确保用户能在各类网络环境下顺利完成所需的文件传输任务。

    特易通国产对讲机A8_setup v1.0中英写频软件

    特易通国产对讲机A8_setup v1.0中英写频软件

    数据结构_CC_课程资料_教学用途_1741867406.zip

    数据结构学习

    基于大数据平台的电力营销自动化管控与辅助决策业务需求规格说明书

    内容概要:本文档为《基于大数据平台的自动化营销管控及辅助决策研究和试点应用业务需求规格说明书》,详细阐述了一个面向电力企业的大型信息化建设项目的内容。该项目旨在利用大数据技术和现有营销数据资源,构建一个能够自动预警高峰用电、预测销售电量及其平均价格与总收入,管理电费欠费风险、预测客户安全用电隐患以及指导业扩报装活动的应用系统。通过本系统的建设可以提升企业的管理水平和决策精准度。文档覆盖了系统建设的背景意义、总体目标和技术路径,并深入探讨现状挑战,在此之上细化描述业务流程和操作细节,提供了丰富的信息详单及数据表格,用于指导具体的开发建设流程。 适合人群:从事电力营销管理和系统集成的高级管理人员、IT技术人员、系统分析师、项目经理等. 使用场景及目标:帮助企业管理层理解业务需求和信息化实施的重点难点,为技术团队提供详尽的技术指引和实现蓝图,为业务用户梳理具体的操作步骤。 其他说明:文中大量列举实际工作环节的具体流程,有助于相关人员更好地理解和掌握系统功能特性,也为系统的后期维护和支持提供重要依据。此外,文档还指出了预期成效,即实现更高效精确的市场营销与风险防控。

    特易通国产对讲机MD446(TYT) v01.29中英写频软件

    特易通国产对讲机MD446(TYT) v01.29中英写频软件

Global site tag (gtag.js) - Google Analytics