spring+hibernate多线程下session问题
来源:互联网 发布:为什么我死都不用知乎 编辑:程序博客网 时间:2024/04/29 21:50
最近一个项目,用的是spring MVC和hibernate3.1的数据采集任务功能, 总是执行几次后页面停留在数据刷新状态, 查询无法进行, 深入了解后, 原来是程序中DAO层的save和update方法出了问题,
@Transactional
public void save(E entity) {
//this.getSession().save(entity); 项目中原来的写法.
this.getHibernateTemplate().save(entity);
}
原来的写法 this.getSession(); 在多线程的情况下, session没有进行自动释放, 连续的多个getSession()操作,spring无法自动关闭这些session, 即使对save进行try catch也不会有任务错误提示.
this.getHibernateTemplate().save 实际使用的应该是this.getHibernateTemplate().getSessionFactory().getCurrentSession().save()方法
this.getHibernateTemplate().getSessionFactory().getCurrentSession()
从spring管理的sessionFactory中创建一个绑定线程的session。Spring会根据该线程的执行情况来自动判断是关闭session还是延迟关闭。不用手动管理实务,一个线程开启和关闭一次session且性能应该是最好的。
若使用 HibernateDaoSupport 提供的 getSession()方法,正常情况下是不用手动管理的, 不过多线程下, 需要在session操作完毕后执行一下 releaseSession(session) 方法, 程序包含多线程情况下 不推荐使用这种方式.
如果需要获取session, 建议使用 this.getHibernateTemplate().getSessionFactory().getCurrentSession(); SessionFactory是线程安全的.
补充:在多线程执行的情况下
使用: this.getHibernateTemplate().getSessionFactory().getCurrentSession() 获取session时报错,
org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here
需要使用 HibernateDaoSupport 提供的 getSession()方法, 并手动在方法结尾 releaseSession(session) 一下.
- spring+hibernate多线程下session问题
- spring+hibernate的session问题
- spring+hibernate的session问题
- Spring+hibernate的session问题
- Spring与Hibernate集成中的session问题
- Spring与Hibernate集成中的session问题
- Spring与Hibernate集成中的session问题
- Spring与Hibernate集成中的session问题
- 记录hibernate+spring中session释放问题
- spring quartz hibernate no session 的问题
- Spring与Hibernate集成中的Session问题
- Hibernate和spring中的session问题整理
- 多线程与hibernate session
- 解决多线程中hibernate出现no session问题
- spring 管理hibernate session
- 集群环境下spring+session+redis,session共享问题
- spring session解决集群环境下session共享问题
- 解析Spring托管下Hibernate Session的生命周期
- java 用mad5对数据进行加密
- linux 的 scp 命令
- 插件式设计的架构模型与实例
- Android TextView设置字体风格
- Ubuntu_Linux chmod 命令
- spring+hibernate多线程下session问题
- TabHost,ViewPager,ListView综合demo
- 文本文件与文档文件
- JavaScript之JSON详解
- 关于Union 中 ORA-12704:字符集不匹配问题的解决
- hibernate merge和update的区别
- VC++实现插件编程 .
- 第六堂课后作业
- eclipse maven 插件安装