社区
Java EE
帖子详情
session未关闭问题
mack1122
2011-09-06 10:15:54
java 中 用的hibernate 。在try外面 调用openSession方法打开session,在finally中关闭session。不知这样是否有session未关闭的风险?有风险能稍微说明下嘛?
...全文
341
25
打赏
收藏
session未关闭问题
java 中 用的hibernate 。在try外面 调用openSession方法打开session,在finally中关闭session。不知这样是否有session未关闭的风险?有风险能稍微说明下嘛?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
25 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
mack1122
2011-09-10
打赏
举报
回复
学习中
惢随你动
2011-09-09
打赏
举报
回复
不关闭session的后果是,随着系统的运行,数据库连接数将逐渐增多,最终导致数据库拒绝连接。
数据库拒绝连接后,重新启动应用,原有连接将释放,此时应用又可正常运行。
如果发现应用存在连接未释放问题而一时半会又不能正确定位时,可通过定时触发的计划任务,重新启动应用,保证应用在一定程度上可用。
如果数据库是db2,那么可能还需要重新启动数据库所在的服务器(操作系统)。
daoledapp
2011-09-09
打赏
举报
回复
ok 既然你这样问的话,那就是没风险,finally就算是有异常抛出之后也会执行!
如果每次都是用显示session 是不是太过浪费,如果session的生命周期只在当前有效的话,希望多听听之前各位的建议!
雪花公子
2011-09-09
打赏
举报
回复
其实没什么风险,用当前的和重新打开session都是会被关闭的。只是重新打开session浪费点资源。getCurrentSession()会自己动被关闭的,而openSession()也会在try里面关关闭啊。
mack1122
2011-09-09
打赏
举报
回复
学习中
ucasliming
2011-09-09
打赏
举报
回复
还可以吧,不会浪费太多资源,就是需要每次都手动关闭session。
袭烽
2011-09-09
打赏
举报
回复
我一般把session交给spring来维护,spring利用线程管理事务,通过事务配置确保每次连接都能得到合理释放,解放精力,为什么不用它呢?
mack1122
2011-09-09
打赏
举报
回复
继续学习
bijanen19861113
2011-09-09
打赏
举报
回复
[Quote=引用 10 楼 loudspeaker1987 的回复:]
当在finally关闭session的时候出现了异常,那么种种异常可以被忽略,并且该对象的终结过程也会终止,未被捕获的异常会是对象处于破坏的状态,如果另一个线程企图使用这种被破坏的对象,则可能发生任何不确定的行为。正常情况下,未被捕获的异常将会使线程终止,并打印出栈轨迹,但是,如果异常发生在终结方法中,则不会如此,甚至连警告都不会打印出来。,但是如果在finally方法中通过显示的终止方法就可以……
[/Quote]
牛啊,比较赞同这里。有没有风险,我只说我的理解,至于有没有你自己签定。
假设说你要在finally中关闭,如果此时关闭抛异常呢?那么你就有必要再次在finally中显式的try吗?如果你没有捕获的话,程序应该是会出问题的。
mack1122
2011-09-09
打赏
举报
回复
学习中
mack1122
2011-09-07
打赏
举报
回复
[Quote=引用 8 楼 zengxianjunccccccccc 的回复:]
唉,不想说
[/Quote]
??不会吧!
仙人长
2011-09-07
打赏
举报
回复
唉,不想说
mack1122
2011-09-07
打赏
举报
回复
openSession 会不会已经打开session,即创建过session,然后某个过程抛出异常?
飞宁越
2011-09-07
打赏
举报
回复
呜~~刚学不懂,帮你顶下!
liuc0317
2011-09-07
打赏
举报
回复
要使用hibernate 最好配合上spring 让它来管理这一切。
dzr1990
2011-09-07
打赏
举报
回复
不关闭肯定是有内存溢出风险的,但是看你的业务大不大,如果不大的话就应该没事。
另外最好用getCurrentSession()啊,楼主……
clnlkw3
2011-09-07
打赏
举报
回复
[Quote=引用 6 楼 mack1122 的回复:]
引用 5 楼 clnlkw3 的回复:
引用 4 楼 mack1122 的回复:
引用 3 楼 clnlkw3 的回复:
别用openSession
用getCurrentSession
兄弟,你跑题了!现在是讨论这个会不会又风险!
好吧,兄弟,用openSession是有风险的
因为这个方法每次都要打开一个session
而且要手动关闭
如果你忘记关闭……
[/Quote]
如果你每次都自觉手动关闭SESSION的话
应该是没有风险的
loudspeaker1987
2011-09-07
打赏
举报
回复
另外补上,你可以参考effective java 2的第七条:避免使用终结方法
loudspeaker1987
2011-09-07
打赏
举报
回复
当在finally关闭session的时候出现了异常,那么种种异常可以被忽略,并且该对象的终结过程也会终止,未被捕获的异常会是对象处于破坏的状态,如果另一个线程企图使用这种被破坏的对象,则可能发生任何不确定的行为。正常情况下,未被捕获的异常将会使线程终止,并打印出栈轨迹,但是,如果异常发生在终结方法中,则不会如此,甚至连警告都不会打印出来。,但是如果在finally方法中通过显示的终止方法就可以避免这个问题,session.close()我不太清楚是否是显式的终止方法,如果是,那么就不存在风险
mack1122
2011-09-06
打赏
举报
回复
[Quote=引用 5 楼 clnlkw3 的回复:]
引用 4 楼 mack1122 的回复:
引用 3 楼 clnlkw3 的回复:
别用openSession
用getCurrentSession
兄弟,你跑题了!现在是讨论这个会不会又风险!
好吧,兄弟,用openSession是有风险的
因为这个方法每次都要打开一个session
而且要手动关闭
如果你忘记关闭了
就可能导致异常或者连接池溢出,最后崩溃
……
[/Quote]
你说的我知道,现在是我说的这样情况有没有风险。数据库的处理都在try中完成。
加载更多回复(5)
微服务架构下的分布式
Session
管理
而时下热门的微服务架构又会为
Session
管理带来哪些改变与影响,我们在做微服务架构下的
Session
管理时又该考虑哪些
问题
。在此我们将会从改变与影响出发,一起探讨如何做好微服务架构下的
Session
管理。
Hibernate中
session
的
关闭
问题
Hibernate中
session
的
关闭
问题
实现一个修改客户信心的功能,分为两部分:一、点击修改,跳转到后台,然后执行根据id查询客户信息的 操作,并将查询到的客户信息回显到前台。二、前台将修改完的信心提交到后台,后台...
tensorflow
session
的
关闭
问题
在网上搜索到的教程中,一般是说:调用tf.
Session
.close方法,或使用
session
作为上下文管理器,都可以
关闭
session
。所以我理解的意思是,如果用方法1打开
session
,那么
session
就不会自动
关闭
。但事实并不是这样的,...
Oracle
Session
会话
关闭
Oracle
Session
会话
关闭
。
hibernate关于
session
的
关闭
问题
hibernate关于
session
的
关闭
问题
1、getCurrent
Session
()与open
Session
()的区别? * 采用getCurrent
Session
()创建的
session
会绑定到当前线程中,而采用open
Session
(),创建的
session
则不会 * 采用...
Java EE
67,512
社区成员
225,880
社区内容
发帖
与我相关
我的任务
Java EE
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
复制链接
扫一扫
分享
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章