事务的7中传播特性

一、传播特性的产生

       在项目开发中,一般将事务设置在service层,当调用这个service方法时,这个service保证了所有的操作在同一个事务中,所有对数据库的操作要么一起成功,要么一起失败。

       如果service方法除了调用DAO,还调用了其他的service方法,如何通过事务控制,保证数据的一致,这个时候就需要事务的传播特性。

二、传播特性种类

       事务的传播特性共有7种:

       1、PROPAGATION_REQUIRED:支持当前事务,如果不存在就新建一个(默认) ;

       2、PROPAGATION_REQUIRES_NEW:开启一个新的事务,如果一个事务已经存在,则将这个存在的事务挂起;

       3、PROPAGATION_SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行。

       4、PROPAGATION_NOT_SUPPORTED:以非事务方式运行,如果有事务存在,挂起当前事务;

       5、PROPAGATION_MANDATORY:必须运行在一个事务中,如果当前没有事务正在发生,将抛出一个异常;

       6、PROPAGATION_NEVER:以非事务方式运行,如果有事务存在,抛出异常;

       7、PROPAGATION_NESTED:如果当前正有一个事务在进行中,则该方法应当运行在一个嵌套式事务中。被嵌套的事务可以独立于封装事务进行提交或回滚。如果封装事务不存在,行为就像PROPAGATION_REQUIRES一样。

三、传播特性作用

       传播特性主要控制是使用老的事务,还是创建新的事务,或者事务是否运行在上下文中。

四、传播特性的调用

 

       1、注解

        示例:

@Transactional(propagation = Propagation.REQUIRED)
public void addStudent(){
    。。。。
}

       2、AOP配置

        示例:

<!-- 配置事务传播特性 -->
<tx:advice id="transactionAdvice" transaction-manager="transactionManager">
	<tx:attributes>
		<tx:method name="execute*" propagation="REQUIRED" rollback-for="java.lang.RuntimeException" />
		<tx:method name="delete*" propagation="REQUIRED" rollback-for="java.lang.RuntimeException" />
		<tx:method name="update*" propagation="REQUIRED" rollback-for="java.lang.RuntimeException" />
		<tx:method name="get*" propagation="REQUIRED" read-only="true" />
		<tx:method name="*" propagation="REQUIRED" />
	</tx:attributes>
</tx:advice>

<aop:config>
	<aop:advisor pointcut="execution(* bs.com.service.impl.*.*(..))" advice-ref="transactionAdvice" />
</aop:config>  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值