java多线程连接oracle连接不释放的问题

oracle9.2.0.7 spring hibernate 环境。遇到java多线程模块连接数据库,产生连接占满的问题,查看数据库中,当前session正在执行的sql是,ALTER SESSION SET TIME_ZONE='+8:00' NLS_LANGUAGE='AMERICAN' NLS_TERRITORY='AMERICA',即多为连接建立后并未执行sql的session。由于采用的是hibernate spring架构,所以连接未关闭的问题,可以不考虑。最后结论如下:

1.那些执行sql的getSession()方法依然要注意自己关闭连接,而且多线程环境下,关闭连接要先判断session是否为null,防止出现多次关闭的Exception。

2.其次出现多个ALTER SESSION SET TIME_ZONE='+8:00' NLS_LANGUAGE='AMERICAN' NLS_TERRITORY='AMERICA' session是由于dao代码中加入了synchronized标记,使得多线程串行调用,即打开了多个连接,但是只有一个连接在执行sql。

3.对于需要越过hibernate,自己获取session的时候,建议使用getCurrentSession()方法。这个方法通过在hibernate中配置

thread

可以,使得session和thread绑定,重要的是session可以随着thread自动关闭,从而减少了关闭session麻烦。

4.连接池的设定也是有讲究的,这个明天总结。

[@more@]

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/146865/viewspace-1019396/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/146865/viewspace-1019396/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值