在网上找到这个帖子:
----------------------------
近日,为了提高程序执行效率,使用存储过程将批量记录写入数据库。
在代码实现中,遇到几个问题:
1  将多条记录数据,封装成Oracle所需的ARRAY类型时,用到Connection。我所使用的数据连接,是由Spring配置org.apache.commons.dbcp.BasicDataSource生成连接的。从这一数据源中,从JdbcDaoSupport得到连接使用时,报对象造型错误。经跟踪,发现JdbcDaoSupport中得到的Connection,并不是Oracle数据库的连接类型。至此改用oracle.jdbc.pool.OracleDataSource提供数据源。2 改用oracle.jdbc.pool.OracleDataSource后,存储过程调用正常。但在随后的压力测试中,发现频繁获取连接时,间断出现得不到连接的报错信息。经查找,问题出在Spring对oracle.jdbc.pool.OracleDataSource数据源的维护上,Spring使用完这个数据源提供的数据连接后并不进行关闭操作,改用org.apache.commons.dbcp.BasicDataSource没有这个问题。       所以,oracle.jdbc.pool.OracleDataSource配置的数据连接源,需要显示的关闭连接。
-----------------------------
我也遇到了同样的问题,可是不知道怎么解决,原因如下:
必须要用oracle.jdbc.pool.OracleDataSource数据源,同时又要用spring的事务管理机制实现事务的管理(org.springframework.jdbc.datasource.DataSourceTransactionManager),这样的话就不能在执行完每条sql语句后显式关闭连接,因为多个sql语句可能在同一个事务中,如果每个sql都关闭连接,就会造成事务的丢失
这种情况,该在哪里关闭连接呢?
谢谢高手!

解决方案 »

  1.   

    这种问题我们回答过多次了,spring 的 openSessionInViewFilter
    你去调查一下!
      

  2.   

    使用了spring的事务管理你还用得着自己管理事务吗,我从来都不关联接的,但是我们公司的后台跑几个月都没事啊,程序也是经常调存储过程的啊!
      

  3.   

    我的tomcat具体表现是:org.apache.tomcat.util.threads.ThreadPool logFull
    严重: All threads (150) are currently busy, waiting. Increase maxThreads (150) or check the servlet status
    昨天我用jemter进行压力测试其中的一个模块,却又不出现这个错误了,可是在客户服务器经常出现...
    请教高手怎么排除问题解决问题