环境如下:
         Linux
         Tomcat6.0
         Sql Server2000配置如下:
     <!-- 数据源-sqlserver -->
     <bean id="dataSource" class="org.apache.tomcat.dbcp.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver" />
<property name="url" value="jdbc:sqlserver://127.0.0.1:1433;databaseName=hello_db;autoReconnect=true" />
        <property name="username" value="hello" />
        <property name="password" value="123456789" />
        <property name="maxActive" value="100"></property>
        <property name="minIdle" value="2"></property>
    </bean>     <!-- iBatis -->
    <bean id="sqlMapClient" 
class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation" value="WEB-INF/sql-map-config.xml"/>
<property name="dataSource" ref="dataSource"/>
    </bean>    <!-- 事务 -->
    <bean id="transactionManager" 
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean> 情况描述如下:
    程序有一段时间停止访问数据库(10分钟左右),再次访问(比如登录操作等之类会和数据库交互的动作)时, 会报Connect rest异常.此时刷新页面,又能够正常访问数据库了。停止不操作一段时间后,再操作,又会重复该现象。 这是什么原因?如何解决?    在网上搜了,听说是加上 autoReconnect=true 
    但是,加上之后还是没用。    望各位高手帮忙。
    感激。

解决方案 »

  1.   

    自己解决
      在连接池的配置文件中添加配置属性:validationQuery   
      为了更好的维护和使用连接池建议修改removeAbandoned,removeAbandonedTimeout,logAbandoned三个属性的值。   
      从文档的介绍看,validationQuery属性只是检测连接是否正常的,我自己写了一个方法也做这样的事,但不能销毁并重建新的连接。没有看dbcp部分的源码,不知道它是怎么实现的。