java.sql.SQLRecoverableException: 关闭的连接 解决办法

程序如果长时间不进行数据库操作,那么数据源中的 Connection 很可能已经断开。其原因有可能是防火墙,或者连接的数据库设置的超时时间。

问题总结:

当数据库连接池中的连接被创建而长时间不使用的情况下,该连接会自动回收并失效,但客户端并不知道,在进行数据库操作时仍然使用的是无效的数据库连接,这样,就导致客户端程序报“ java.sql.SQLException: Io 异常: Connection reset” 或“java.sql.SQLException 关闭的连接”异常。

在配置数据源后面加上

配置后,客户端在使用一个无效的连接时会先对该连接进行测试,如果发现该连接已经无效,则重新从连接池获取有效数据库连接来使用


程序中采用的是Spring+IBatis,数据源配置如下:在 applicationContext.xml中如下设置:


  
  
  
  
  
        
        
        
 


 经过查找资料和分析,得出该问题主要是由于连接时间过长,失效所致,将以上配置修改如下:


  
  
  
  
  
        
        
        
        
 

顺便提一下数据库DBCP连接池:

在applicationContext.xml中:

  
      
          
          
          
          
            
          
            
          
            
          
            
          
          
          
            
          
            
          
          
          
          
          
          
          
          
          
      
      



c3p0解决:

解决的办法是: 

在 applicationContext.xml中如下设置:

destroy-method="close">

 

 

GBK

CP1252

WDS

HelloOracle 

 

配置项一定要作为 的子元素,而不能做为 的子元素,否则不起作用。


 

参考:

http://my.oschina.net/tianzimensheng/blog/65225

http://www.cnblogs.com/younes/archive/2012/06/01/2529483.html

http://www.cnblogs.com/safeking/archive/2007/02/01/637067.html


你可能感兴趣的:(错误解决)