首页 > 编程语言 > 详细

spring4+hHibernate5 项目使用多线程时单个线程无法获取session问题

时间:2021-05-07 18:55:56      阅读:21      评论:0      收藏:0      [点我收藏+]
1.事务需要由spring管理
<prop key="hibernate.current_session_context_class">
org.springframework.orm.hibernate5.SpringSessionContext
</prop>

2.在业务service注入sessionFactory
@Resource(name="sessionFactory")
private SessionFactory sessionFactory;
3.service方法添加事务注解
单个线程{
//绑定session到当前线程
boolean participate = serviceImpl.bindHibernateSessionToThread(sessionFactory);
//业务逻辑...
//关闭session
serviceImpl.closeHibernateSessionFromThread(participate, sessionFactory);

}
// 绑定Session到新的线程方法
public static boolean bindHibernateSessionToThread(SessionFactory sessionFactory) {
if (TransactionSynchronizationManager.hasResource(sessionFactory)) {
// Do not modify the Session: just set the participate flag.
return true;
} else {
Session session = sessionFactory.openSession();
session.setFlushMode(FlushMode.MANUAL);
SessionHolder sessionHolder = new SessionHolder(session);
TransactionSynchronizationManager.bindResource(sessionFactory, sessionHolder);
}
return false;
}

// 关闭Session方法
public static void closeHibernateSessionFromThread(boolean participate, Object sessionFactory) {
if (!participate) {
SessionHolder sessionHolder = (SessionHolder) TransactionSynchronizationManager
.unbindResource(sessionFactory);
SessionFactoryUtils.closeSession(sessionHolder.getSession());
}
}

spring4+hHibernate5 项目使用多线程时单个线程无法获取session问题

原文:https://www.cnblogs.com/guojunjieblog/p/14741573.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!