1. 程式人生 > >spring手動事務控制

spring手動事務控制

在專案開發中需要用到手動事務進行控制。現說下遇到的問題以及解決方案:

如果程式需要使用巢狀事務,則需要在配置檔案中新增一個配置屬性,如下:

<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();