`
winnerlxh
  • 浏览: 91747 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

基于struts2、spring的应用闲置一段时间后报空指针错

    博客分类:
  • SSH
阅读更多
在做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 [基于struts2,spring的应用闲置一段时间后报空指针错] =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>

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

相关推荐

    开发基于Struts Spring Hibernate Ajax的网上信息发布平台(Struts Hibernate Spring Ajax)--指导学习2

    Struts Hibernate Spring Ajax Struts Hibernate Spring Ajax

    基于struts2 spring hibernate整合

    在这个“基于Struts2 Spring Hibernate整合”的项目中,我们看到开发者使用了Maven作为构建工具,这使得依赖管理和项目构建变得更加规范和便捷。 1. **Struts2**:Struts2是一个开源的MVC框架,它继承了Struts1的...

    项目实践精解:基于Struts-Spring-Hibernate的Java应用开发

    在Java世界中,Struts、Spring和Hibernate是三个非常重要的框架,它们构成了...文档“项目实践精解:基于Struts-Spring-Hibernate的Java应用开发.doc”应当包含了详细的步骤和示例,帮助读者更好地理解和掌握这一主题。

    基于struts+spring+hibernate+oracle的移动ssh项目源码

    基于struts+spring+hibernate+oracle的移动ssh项目源码 基于struts+spring+hibernate+oracle的移动ssh项目源码 基于struts+spring+hibernate+oracle的移动ssh项目源码 基于struts+spring+hibernate+oracle的移动ssh...

    开发基于Struts Spring Hibernate Ajax的网上信息发布平台(Struts Hibernate Spring Ajax)--Chapter1

    在本章中,我们将深入探讨如何开发一个基于Struts、Spring、Hibernate和Ajax的网上信息发布平台。这四个技术是Java Web开发中的核心组件,它们各自承担着不同的职责,共同构建了一个强大而灵活的后端架构。 **...

    基于struts2 spring hibernate 开发的bbs论坛

    本项目"基于Struts2 Spring Hibernate开发的BBS论坛"是一个典型的MVC(Model-View-Controller)架构的实例,旨在帮助初学者理解并掌握这些技术的实际应用。 Struts2作为MVC框架,主要负责控制层,它的主要任务是...

    基于Struts2+Spring+Hibernate+MySql的注册登录系统.zip

    Struts2、Spring、Hibernate和MySql这四个技术是Java Web开发中常用的一套经典组合,被称为SSH框架。这个注册登录系统就是利用这些技术构建的。下面将详细讲解这套组合的相关知识点。 首先,Struts2是一个强大的MVC...

    基于Struts 2+Hibernate+Spring实现论坛系统

    Struts 2、Hibernate 和 Spring 是 Java Web 开发中的三个重要框架,它们组合起来可以构建高效、可维护的Web应用程序,尤其是对于复杂的企业级论坛系统。这个基于Struts 2+Hibernate+Spring实现的论坛系统,充分利用...

    Struts2、Spring和Hibernate应用实例.

    现在就将笔者使用Myeclipse工具应用struts2 + spring2 + hibernate3 实现CRUD操作的步骤一一纪录下来,为初学者少走弯路略尽绵薄之力!在本文中,笔者将Struts2.0.6、Spring2.0.6和Hibernate3.1进行整合,希望通过...

    Java Web整合开发实战:基于Struts 2+Hibernate+Spring(PDF)

    Java Web整合开发实战--基于Struts 2+Hibernate+Spring.pdf 1章 Web的工作机制 2章 搭建Java Web开发环境 3章 JSP及其相关技术 2篇 表现层框架Struts技术 4章 Struts快速上手 5章 解密Struts之核心文件 6章 ...

    struts2+spring+hibernate整合中spring注入出错。页面中报空指针异常。高手来看看怎么决绝。

    标题提到的问题是“struts2+spring+hibernate整合中spring注入出错,页面中报空指针异常”,这通常是由于Spring的依赖注入没有正确配置导致的。 首先,让我们深入了解一下Struts2、Spring和Hibernate各自的核心概念...

    struts2-spring3-hinernate4

    SSH(Struts2、Spring3、Hibernate4)是Java Web开发中的一个经典组合,用于构建高效、可维护的Web应用程序。这个压缩包包含了SSH框架集成的相关资料,让我们逐一解析其中的知识点。 首先,Struts2是MVC(Model-...

    struts2+spring4+hibernate

    Struts2、Spring4和Hibernate是Java开发中的三大框架,它们在构建企业级Web应用程序时起着核心作用。本教程将深入探讨这三个框架如何协同工作,以实现高效、灵活和可扩展的电子商务平台。 首先,Struts2是一个基于...

    基于Struts+Spring+Hibernate框架的网络评比系统.

    基于Struts+Spring+Hibernate框架的网络评比系统.

    基于struts2+spring2+hibernate3的注册登陆

    这个项目是一个经典的Java Web应用程序开发案例,采用的技术栈是Struts2、Spring2和Hibernate3,这三大框架组合在一起,可以实现MVC(Model-View-Controller)架构,提供数据持久化、业务逻辑管理和前端交互的能力。...

    Struts2,Spring与Hibernate整合应用,学生成绩管理系统

    ### Struts2、Spring与Hibernate整合应用:学生成绩管理系统 #### 一、知识点概览 本项目聚焦于Struts2、Spring与Hibernate三大框架的整合应用,旨在构建一个高效、稳定、易于维护的学生成绩管理系统。通过整合这...

    Struts2、Spring和Hibernate应用实例

    Struts2、Spring和Hibernate是Java开发中三大主流框架,它们各自解决不同的问题,并且可以协同工作,构建出高效、可维护的企业级Web应用程序。在本实例中,我们将深入探讨这三个框架的核心概念、功能以及如何将它们...

    最新版本的Struts2+Spring4+Hibernate4框架整合

    同时使用了Struts2、Spring4、Hibernate4、log4j、slf4j、junit4、ehcache等库或框架,搭建一个最基本的项目原型。 三、 三大框架最新版本下载:截止2014-10-01 Struts2.3.6:发布于2014-05-03,目前的最新版本。...

    基于jsp+struts+spring+hibernate的Blog

    【基于jsp+struts+spring+hibernate的Blog】是一个经典的Java Web应用程序开发框架组合,广泛用于构建高效、可维护的企业级应用。这个项目利用了四种技术:JSP(JavaServer Pages)、Struts、Spring和Hibernate,每...

    struts2-spring-plugin-2.3.4.jar

    Struts2-Spring-Plugin-2.3.4.jar 是一个专门为 Struts 2 框架和 Spring 框架整合而设计的插件,主要用于处理 Struts 2 和 Spring 之间的集成问题。在Java Web开发中,这两个框架经常一起使用,Spring 提供了依赖...

Global site tag (gtag.js) - Google Analytics