[ERROR] 2012-12-13 14:41:30  org.hibernate.util.JDBCExceptionReporter:78 - Cannot get a connection, pool error Timeout waiting for idle object
[ERROR] 2012-12-13 14:41:30  org.hibernate.util.JDBCExceptionReporter:78 - Cannot get a connection, pool error Timeout waiting for idle object
[ERROR] 2012-12-13 14:41:31  org.hibernate.util.JDBCExceptionReporter:78 - Cannot get a connection, pool error Timeout waiting for idle object
[ERROR] 2012-12-13 14:41:31  org.hibernate.util.JDBCExceptionReporter:78 - Cannot get a connection, pool error Timeout waiting for idle object
[ERROR] 2012-12-13 14:41:31  org.quartz.core.JobRunShell:211 - Job DEFAULT.attackCountEvent threw an unhandled Exception: 
org.springframework.scheduling.quartz.JobMethodInvocationFailedException: Invocation of method 'executeInternal' on target class [class edu.xjtu.sei.skyeye.state.timer.AttackEventCountTimer] failed; nested exception is org.hibernate.exception.GenericJDBCException: Cannot open connection
at org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean$MethodInvokingJob.executeInternal(MethodInvokingJobDetailFactoryBean.java:269)
at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:86)
at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:525)
Caused by: org.hibernate.exception.GenericJDBCException: Cannot open connection
at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103)
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:29)
at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:424)
at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:144)
at org.hibernate.jdbc.AbstractBatcher.prepareQueryStatement(AbstractBatcher.java:139)
at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1538)
at org.hibernate.loader.Loader.doQuery(Loader.java:661)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)
at org.hibernate.loader.Loader.doList(Loader.java:2211)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2095)
at org.hibernate.loader.Loader.list(Loader.java:2090)
at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:289)
at org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1695)
at org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:142)
at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:152)
at edu.xjtu.sei.skyeye.state.dao.AttackMontorDAO.checkCount(AttackMontorDAO.java:44)
at edu.xjtu.sei.skyeye.state.timer.AttackEventCountTimer.executeInternal(AttackEventCountTimer.java:47)
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:597)
at org.springframework.util.MethodInvoker.invoke(MethodInvoker.java:276)
at org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean$MethodInvokingJob.executeInternal(MethodInvokingJobDetailFactoryBean.java:260)
... 3 more
Caused by: org.apache.commons.dbcp.SQLNestedException: Cannot get a connection, pool error Timeout waiting for idle object
at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:104)
at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:880)
at org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider.getConnection(LocalDataSourceConnectionProvider.java:82)
at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:421)
... 23 more在spring调用的时候刚开始都能执行,大概有2000多调数据,执行上大概10条左右就出现这种问题。不知道什么情况。求大神详解下。谢谢

解决方案 »

  1.   

    org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot get a connection, pool error Timeout waiting for idle object经过调查发现,抛出此异常的原因为连接池泄漏,也就是再也无法从连接池中获取有效的数据库连接。频繁的刷新页面导致上一次获取的connection还没有得到有效释放,下一次的connection请求已经到达,如是刷新多次后导致池资源耗尽,即所谓的连接池泄漏。   而且,在此种情况下,最糟糕的是异常发生后导致整个服务向连接池发起connection请求都将一直抛出如上异常,无法恢复到正常状态。服务宕机,必须重启tomcat才能恢复,这真是个可怕的事情。摘自:http://blog.csdn.net/wang12/article/details/6427069
      

  2.   


    还是没有解决问题。只不过insert的时候比以前多了
      

  3.   

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
     http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
     http://www.springframework.org/schema/tx
     http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
     http://www.springframework.org/schema/aop
     http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">
    <!-- 数据源 -->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
    destroy-method="close">
    <property name="driverClassName" value="com.mysql.jdbc.Driver">
    </property>
    <property name="url" value="jdbc:mysql://localhost:3306/xxxx"></property>
    <property name="username" value="xxxx"></property>
    <property name="password" value="xxxx"></property>
    </bean>
    <!-- 会话工厂 -->
    <bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource">
    <ref bean="dataSource" />
    </property>
    <property name="hibernateProperties">
    <props>
    <prop key="hibernate.dialect">
    org.hibernate.dialect.MySQLDialect
    </prop>
    <prop key="hibernate.show_sql">
    true
    </prop>
    </props>
    </property>
    <property name="mappingResources">
    <list>
    <value>org/search/entity/SearchInfo.hbm.xml</value>
    </list>
    </property>
    </bean>
    <!-- 声明式事务 -->
    <!-- 1、有关事务的配置 -->
    <bean id="transactionManager"
    class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory">
    <ref bean="sessionFactory" />
    </property>
    </bean>
    <!-- 2、事务通知 -->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
    <tx:attributes>
    <tx:method name="insert*" propagation="REQUIRED" />
    <tx:method name="add*" propagation="REQUIRED" />
    <tx:method name="delete*" propagation="REQUIRED" />
    <tx:method name="del*" propagation="REQUIRED" />
    <tx:method name="update*" propagation="REQUIRED" />
    <tx:method name="modify*" propagation="REQUIRED" />
    <tx:method name="get*" propagation="SUPPORTS" read-only="true" />
    <tx:method name="find*" propagation="SUPPORTS" read-only="true" />
    </tx:attributes>
    </tx:advice>
    <!-- 3、织入 -->
    <aop:config>
    <aop:pointcut id="bizMethods"
    expression="execution(* org.search.service.*.*.*(..))" />
    <aop:advisor advice-ref="txAdvice" pointcut-ref="bizMethods" />
    </aop:config>
    <!-- Dao -->
    <bean id="searchDao" class="org.search.dao.impl.SearchDaoImpl">
    <property name="sessionFactory" ref="sessionFactory" />
    </bean>
    <!-- Service -->
    <bean id="searchService" class="org.search.service.impl.xxxx">
    <property name="searchDao" ref="searchDao" />
    </bean>
    <!-- Action -->
    <bean id="searchAction" class="org.search.action.xxxx">
    <property name="searchService" ref="searchService" />
    </bean>
    <!-- Timer:1 注入索引器启动程序-->
    <bean id="indexEngine" class="org.search.util.IndexEngine" />
    <bean id="fsEngine" class="org.search.util.FileSweepEngine" />
    <bean id="timerEngine" class="org.search.util.TimerEngine">
    <property name="indexEngine" ref="indexEngine" />
    <property name="fsEngine" ref="fsEngine"/>
    </bean>
    <!-- Timer:2 配置定时器锁定程序:索引器启动程序,时间;
     Period:执行各后续任务之间的时间间隔,单位是毫秒;
     Delay:执行任务前的延迟时间,单位是毫秒;-->
    <bean id="scheduledReportTask" class="org.springframework.scheduling.timer.ScheduledTimerTask">
    <property name="timerTask">
    <ref bean="timerEngine" />
    </property>
    <property name="period">
    <value>60000</value>
    </property>
    <property name="delay">
    <value>0</value>
    </property>
    </bean>
    <!-- Timer:3 负责启动定时器任务-->
    <bean class="org.springframework.scheduling.timer.TimerFactoryBean">
    <property name="scheduledTimerTasks">
    <list>
    <ref bean="scheduledReportTask" />
    </list>
    </property>
    </bean>
    </beans>