项目是struts+spring+hibernate,数据库sql server 2000,tomcat服务器启动后,关闭数据库(服务)连接,稍后再次启动数据库(服务)连接,系统不能正常运行,报org.hibernate.exception.JDBCConnectionException: could not execute query。请问各位大侠,不重启tomcat怎么实现上述操作后使系统正常运行?

解决方案 »

  1.   

    您关闭的是服务还是数据库连接
    反正这样做肯定不行好比说你跟别人的往来
    本来是通的
    可是你突然关闭然后在打开
    可能结果上是一致的
    但是你要知道如果是tomcat的话
    你重新启动的过程中
    用户是访问不了网页的还有,你为什么要关闭服务呢或者是数据库连接呢!!!
      

  2.   

    我的意思是:用户在使用过程中有可能数据库出现问题,或者其他的原因重启了数据库服务,那么怎样才能实现不重启tomcat使项目正常运行?
      

  3.   

    applicationcontext.xml中数据库连接的代码:
    <bean id="datesource"
    class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName"
    value="com.microsoft.jdbc.sqlserver.SQLServerDriver">
    </property>
    <property name="url"
    value="jdbc:microsoft:sqlserver://127.0.0.1:1433">
    </property>


    <property name="username" value="sa"></property>
    <property name="password" value="sa"></property>
    <property name="maxActive" value="300"></property>
    <property name="maxIdle" value="1000"></property>
    </bean>
      

  4.   

    貌似默认的dbcp不会在连接断开后重连,换个c3p0试试?
    但愿我猜对了。
      

  5.   

    数据库连接池会在启动时就建立所需的若干连接,并一直保持连接状态,但是当数据库服务停止后,这些连接就被外部因素给中断了(记得hibernate默认的连接池不会执行重连,加上mysql默认会在8小时候掐掉闲置的链接,就会出现错误,后来换了c3p0就好了)
    此处超过8小时外部掐掉连接,和楼主手动关掉数据库服务差不多。
    猜的啊。
      

  6.   

    c3p0的代码能给我参考一下吗?需要添加jar包之类的吗?
      

  7.   

    需要引入c3p0的jar包,楼主上网搜一下吧,ssh中的配置也搜下吧。
    我这只有但用hibernate的配置,没ssh的,还是楼主自己动手吧,不难的。
      

  8.   

    我整好了,用c3p0可以实现。下面跟大家分享一下,dinghun8leech说的对,dbcp确实是在重启数据库服务后不会重新连接,c3p0会,我把ssh中用c3p0连接sqlserver的那部分代码贴出,供以后遇见这种情况的coder们:
    <bean id="datesource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
                <property name="driverClass" value="com.microsoft.jdbc.sqlserver.SQLServerDriver"></property>
                <property name="jdbcUrl" value="jdbc:microsoft:sqlserver://127.0.0.1:1433"></property>
                <property name="user" value="sa"></property>
                <property name="password" value="sa"></property>
                <property name="maxPoolSize" value="300"></property>
                
                <property name="initialPoolSize" value="1"></property>
                <property name="maxIdleTime" value="20"></property>
            </bean>