SpringMVC+hibernate4 oracle数据处理老报游标超出最大值的问题原因与解决方式

最近在项目中用到了apache的common-dbcp框架,在spring的配置文件中,加入了dataSource的配置,如下: 

Xml代码 
  
          
          
          
          
          
  
          
          
          
          
          
          
          
      

 
 
 
 
 
 

 
 
 
 
 
 
 
测试,没问题。但是,在商用环境上,突然发现,经过一段时间的数据库操作,数据库连接的游标用尽,报出maximum open cursors exceeded, 排查了很久,代码里面没有未关连接的情况(因为用的是spring的jdbc模板),也没有使用任何存储过程。在万般无奈下,最后查看了配置文件,突然发现 

Xml代码 
  

这个配置以前没使用过(注:因为这个配置是从网上down下来的)。查看了common-dbcp的api,原来这个地方把每个connection用到的preparedStatement都缓存到池中了(具体实现机制还没看源代码,我猜想是这样),最后导致preparedStatement未释放,游标也就一直没释放,到游标最大数直接报错。 

最后,把poolPreparedStatements设置为false后,问题解决

你可能感兴趣的:(SpringMVC+hibernate4 oracle数据处理老报游标超出最大值的问题原因与解决方式)