在做struts2、spring网站时,在系统闲置一段时间后,访问页面会出错,第二次再访问就正常了。后来查了后台日志,发现是数据库连接关闭了,导致页面访问出错。页面上报空指针错误,错误没有保留,日志中记录的错误如下:

ERROR (java.sql.Connection:19)- Error calling Connection.close:
java.sql.SQLException: Already closed.
at org.apache.commons.dbcp.PoolableConnection.close(PoolableConnection.java:84)
at org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.close(PoolingDataSource.java:181)
at org.springframework.jdbc.datasource.DataSourceUtils.doReleaseConnection(DataSourceUtils.java:313)
        at org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy$TransactionAwareInvocationHandler.invoke(TransactionA
wareDataSourceProxy.java:200)
        at $Proxy0.close(Unknown Source)
        at sun.reflect.GeneratedMethodAccessor58.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at com.ibatis.common.jdbc.logging.ConnectionLogProxy.invoke(ConnectionLogProxy.java:68)
        at $Proxy1.close(Unknown Source)
        at com.ibatis.sqlmap.engine.transaction.external.ExternalTransaction.close(ExternalTransaction.java:82)
        at com.ibatis.sqlmap.engine.transaction.TransactionManager.end(TransactionManager.java:111)
        at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.endTransaction(SqlMapExecutorDelegate.java:782)
        at com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.endTransaction(SqlMapSessionImpl.java:176)
        at com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.endTransaction(SqlMapClientImpl.java:154)
        at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.autoEndTransaction(SqlMapExecutorDelegate.java:883)
        at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMapExecutorDelegate.java:622)
        at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMapExecutorDelegate.java:589)
        at com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.queryForList(SqlMapSessionImpl.java:118)
        at com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.queryForList(SqlMapClientImpl.java:95)
        at com.wangar.ptc.dao.ibatis.IbatisSysMenuDAO.querySysMenuList(IbatisSysMenuDAO.java:50)
        at com.wangar.ptc.dao.impl.DefaultSysMenuDAO.querySysMenuList(DefaultSysMenuDAO.java:22)
        at com.wangar.ptc.manager.impl.DefaultSysMenuManager.querySysMenuList(DefaultSysMenuManager.java:187)
        at com.wangar.ptc.manager.impl.DefaultSysMenuManager.querySysMenuBySmid(DefaultSysMenuManager.java:146)
        at com.wangar.ptc.manager.impl.DefaultSysMenuManager.getRootSysMenu(DefaultSysMenuManager.java:90)
        at com.wangar.ptc.ao.impl.DefaultSysMenuAO.getRootSysMenu(DefaultSysMenuAO.java:50)
        at com.wangar.ptc.action.IndexAction.mainIndex(IndexAction.java:26)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:441)
        at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:280)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:243)
        at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:165)
        at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
        at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:252)
        at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.jav
a:68)

……省略部分错误……

看到错误后大致想到了是因为数据连接长时间不用,自己关闭掉了,所以首先想到从数据源配置参数入手,经过一翻查找,看到有人遇到了和我一样的问题,在这里先把内容贴出来。我在spring中用apache 的 dbcp 数据进行数据库连接,配置代码如下:
####  DBCP配置 ####
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/database
jdbc.username=user
jdbc.password=usr
数据源配置
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="${jdbc.driver}" />
    <property name="url" value="${jdbc.url}" />
    <property name="username" value="${jdbc.username}" />
    <property name="password" value="${jdbc.password}" />
</bean>

修改后的配置
####  DBCP配置 ####
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/database
jdbc.username=user
jdbc.password=usr
#初始化 连接
jdbc.initialSize=0
#连接池的最大活动个数
jdbc.maxActive=20
#没有人用连接的时候,最大闲置的连接个数。
jdbc.maxIdle=100
#没有人用连接的时候,最小闲置的连接个数。
jdbc.minIdle=0
#超时等待时间以毫秒为单位
jdbc.maxWait=10000
#是否自动回收超时连接
jdbc.removeAbandoned=true
#设置被遗弃的连接的超时的时间(以秒数为单位),即当一个连接被遗弃的时间超过设置的时间,则它会自动转换成可利用的连接。默认的超时时间是300秒。
jdbc.removeAbandonedTimeout=60
#是否在自动回收超时连接的时候打印连接的超时错误
jdbc.logAbandoned = true
#给出一条简单的sql语句进行验证
jdbc.validationQuery=select 1 from dual
#在取出连接时进行有效验证
jdbc.testOnBorrow=true

数据源配置
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="${jdbc.driver}" />
    <property name="url" value="${jdbc.url}" />
    <property name="username" value="${jdbc.username}" />
    <property name="password" value="${jdbc.password}" />
    <property name="maxActive" value="${jdbc.maxActive}" />
    <property name="maxIdle" value="${jdbc.maxIdle}" />
    <property name="maxWait" value="${jdbc.maxWait}" />
    <property name="removeAbandoned" value="${jdbc.removeAbandoned}" />
    <property name="removeAbandonedTimeout" value="${jdbc.removeAbandonedTimeout}" />
    <property name="logAbandoned" value="${jdbc.logAbandoned}" />
    <property name="validationQuery" value="${jdbc.validationQuery}" />
    <property name="testOnBorrow" value="${jdbc.testOnBorrow}" />
</bean>

其中蓝色加粗部分主要是解决数据库自动重连的问题。

原文:http://blog.sina.com.cn/s/blog_655c5e7b0100h9iu.html

转载于:https://www.cnblogs.com/Anlycp/p/3302625.html

基于struts2、spring的应用闲置一段时间后报空指针错(转)相关推荐

  1. Windows10笔记本 闲置一段时间后黑屏无法唤醒,风扇全速运转的解决日志

    -- 前言 这个问题反复出现了很多次,自己研究过,也去微软社区提了问,都没有成功修复问题.想不到最后的解决方法却很简单,只是为了找这个原因废了不少周折,甚至于技术顾问都已经提出了这个角度,但因为某些原 ...

  2. navicat连接数据库,闲置一段时间后,再次操作,反应非常缓慢

    navicat 连接数据库, 一段时间没有进行操作, 再进行操作比如刷新当前打开的表或者新打开表,会非常久的时间. 后来发现 Mysql服务器端会定时清理长时间不活跃空闲的数据库连接,以此优化数据库的 ...

  3. Spring task定时任务执行一段时间后莫名其妙停止的问题

    前因: 我写了一个小项目,主要功能是用Spring task定时任务每天定时给用户发送邮件.执行了几个月一直没有问题,前几天,莫名其妙的突然不再发送邮件了. 只好花费一些时间来查看到底是什么原因造成的 ...

  4. ssh闲置一段时间自动登出问题的解决

    1.问题:ssh连接到服务器,没有操作一段时间就自动登出:          等待输入超时:自动登出,这是闲置超时自动退出 方法一:    1)定位用户目录,如etl用户      /home/etl ...

  5. 页面闲置一段时间后,跳转

    这里提供两个用JS实现的页面闲置后跳转的例子 <script> function count() {timer = window.setInterval("aa()", ...

  6. es的链接老是断开怎么办_es问题解决方案记录- python es客户端 闲置一段时间后会被断开连接解决方案...

    问题描述: 在django中使用es, 当长时间没有请求查询时(大概半个小时左右),请求,则会出现超时异常,而下一次则会请求成功 初步排查: 通过测试与网上收集信息,初步判定为长时间空闲导致防火墙断开 ...

  7. 鼠标闲置一段时间后自动隐藏

    该问题来自论坛提问,两个api函数 GetLastInputInfo:获取闲置时间 ShowCursor:设置鼠标状态,这里要注意,本函数并不能直接影响鼠标状态,而是设置状态计数器,参数为True时计 ...

  8. TSINGSEE青犀视频H265播放器FLV.js播放一段时间后报内存不足怎么处理?

    EasyPlayer随着多年不断的更新和迭代,不断基于成功的实践经验,发展出包括有: EasyPlayer RTSP.EasyPlayer RTMP.EasyPlayerPro 和EasyPlayer ...

  9. tomcat服务器一直自动关,项目在tomcat里运行一段时间总是自动崩掉的问题排查与解决...

    最近的检验系统上线一段时间后,发现系统访问不了,tomcat总是会自动崩掉,一般遇到这种问题,程序员的第一反应都肯定是内存溢出. 确实是,但是java里内存分好几种,堆内存.栈内存.静态内存区等等,下 ...

  10. 运行一段时间报Failed to write core dump. Core dumps have been disabled. To enable core dumping, try ulimit

    部署微服务,20个服务部署到一台腾讯云服务器上. 多个项目运行一段时间均报错: 2019-11-23 16:04:19.418 INFO 19851 --- [nio-8780-exec-4] c.c ...

最新文章

  1. 迁移学习之DenseNet121(121层),DenseNet169(169层),DenseNet201(201层)(图像识别)
  2. 人脸识别技术及其应用领域
  3. python 单一进程实例 实现
  4. Linux Centos7安装Oracle12c第二版本
  5. python 廖雪峰数据分析统计服_廖雪峰Python总结1
  6. c++ 字符串相等比较
  7. sql语句查询数据库中含有某字符串的表名
  8. “SQL对象名无效”的解决过程
  9. 2019春年第三次课程设计实验报告
  10. 搭建直播平台,Android端直播APP源码如何实现礼物效果
  11. Linux环境下ATAPI MO的使用方法(转)
  12. PM3嗅探数据采集密码自动提取密码工具
  13. 计算机网上邻居的网络密码是什么,网上邻居打开时需访问密码是怎么回事
  14. D2 日报 2019年 03月 13日
  15. android中RecyclerView添加下划线
  16. Android 如何在关于手机界面添加个图片
  17. 安装和配置 苹果CMS v10 的记录 搭建教程
  18. 【Win10】电脑麦克风录音:设备调测
  19. C语言实现无符号乘法
  20. PTA 22-23-1学期《数据结构》拓展练习题集

热门文章

  1. @NOIP2018 - D1T1@ 铺设道路
  2. php 判断访问是否是手机或者pc
  3. 【探路者】10月16日立会报告(团队第1周-第3次)
  4. 对MVC设计模式的理解
  5. 开发过程中解决各种跨域问题
  6. 计蒜客 16876 韩梅梅的抽象画
  7. Django中ORM模型总结(二)[抽象模型类,模型类的对应关系,模型类的属性,字段类型]...
  8. Jenkins随笔(四)常用插件-SVN
  9. .Net 读取xml
  10. size()计算jquery对象中元素的个数