指尖世界

分享的乐趣

spring手动事务控制

类别: 观点 更新时间: 2017-09-14

在项目开发中需要用到手动事务进行控制。现说下遇到的问题以及解决方案:

如果程序需要使用嵌套事务,则需要在配置文件中添加一个配置属性,如下:

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