spring手动事务控制

2019-08-02 11:06:01 浏览数 (1)

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

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

代码语言:javascript复制
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
	<property name="sessionFactory">
		<ref bean="sessionFactory" />
	</property>
	<property name="nestedTransactionAllowed" value="true"/>
</bean>

如果需要手动事务进行控制,可以使用PlatformTransactionManager代码如下

代码语言:javascript复制
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,"处理发布结算单消息失败"); 
}

如果是结合声明式事务进行控制,可以使用下面代码:

代码语言:javascript复制
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();

0 人点赞