spring+hibernate使用手动事务-session与当前线程绑定
前言
在做一个定时执行job的时候(非web项目),发现配置的事务没有起作用,大佬指点说是因为session没有与当前线程绑定。似懂非懂,查了好多资料,自己又一点一点测试,发现以下两种方法。仅供参考,可能有不对的地方,欢迎大佬们指正。
HibernateTransactionManager
第一种方法就是使用HibernateTransactionManager、TransactionStatus解决
HibernateTransactionManager transactionManager = null;
TransactionStatus status = null;
// 开启手动事务
transactionManager = (HibernateTransactionManager) ApplicationLoader.getContext().getBean("transactionManager");
DefaultTransactionDefinition def = new DefaultTransactionDefinition();
// 事物隔离级别,开启新事务,这样会比较安全些。
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
for(int j = 0; j <= 10; j++) {
// 获得事务状态
status = transactionManager.getTransaction(def);
Session s = transactionManager.getSessionFactory().getCurrentSession();
// 此处b是true
boolean b = s.isOpen(