spring手動事務控制
阿新 • • 發佈:2019-02-10
在專案開發中需要用到手動事務進行控制。現說下遇到的問題以及解決方案:
如果程式需要使用巢狀事務,則需要在配置檔案中新增一個配置屬性,如下:
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
<property name="nestedTransactionAllowed" value="true"/>
</bean>
如果需要手動事務進行控制,可以使用PlatformTransactionManager程式碼如下
DefaultTransactionDefinition def = new DefaultTransactionDefinition(); def.setIsolationLevel(TransactionDefinition.ISOLATION_READ_COMMITTED); def.setPropagationBehavior(TransactionDefinition.PROPAGATION_NESTED); PlatformTransactionManager txManager = (PlatformTransactionManager) BeanLocator.getInstance().getBean("transactionManager"); TransactionStatus transactionStatus = txManager.getTransaction(def); try { } catch (Exception e) { logger.error("處理基地同步結算單出錯" + settlement.toString(), e); txManager.rollback(transactionStatus); throw new XmlHttpException(IoddConstant.PRM_OTHER_ERROR,"處理髮布結算單訊息失敗"); }
如果是結合宣告式事務進行控制,可以使用下面程式碼:
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();