ITPub博客

首页 > 数据库 > Oracle > java多线程连接oracle连接不释放的问题

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

原创 Oracle 作者:mlh9906 时间:2009-03-25 00:11:32 0 删除 编辑

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/,如需转载,请注明出处,否则将追究法律责任。

全部评论

注册时间:2009-04-27

  • 博文量
    11
  • 访问量
    13068