Spring中事务的传播行为
来源:互联网 发布:人工智能不是威胁辩论 编辑:程序博客网 时间:2024/06/06 04:28
Spring中事务的传播行为
一、说在前面
1、当事务方法被另一个事务方法调用时,必须指定事务应该如何传播。例如:方法可能继续在现有事务中运行,也可能开启一个新事务,并在自己的事务中运行。2、事务的传播行为可以由传播属性指定。Spring 定义了 7 种类传播行为:
(1)REQUIRED:如果有事务在运行,当前的方法就在这个事务内运行,否则,就启动一个新的事务,并在自己的事务里运行。
(2)REQUIRES_NEW:当前的方法必须启动新事务,并在它自己的事务里运行;如果有事务正在运行,应该将它挂起。
(3)MANDATORY:当前的方法必须运行在事务内部,如果没有正在运行的事务,就抛出异常。
(4)NESTED:如果有事务在运行,当前的方法就应该在这个事务的嵌套事务里运行,否则,就启动一个新的事务,并在它自己的事务里运行。
(5)NEVER:当前的方法不应该运行在事务中,如果有运行的事务,就抛出异常。
(6)NOT_SUPPORTED:当前的方法不应该运行在事务中,如果有运行的事务,就将它挂起。
(7)SUPPORTS:如果有事务在运行,当前的方法就在这个事务内运行,否则,它可以不运行在事务中。
二、实例代码如下:
本实例是在上一篇文章Spring中声明式事务管理的例子的基础上进行的,重复代码不在赘述,请翻阅上一篇文章。
1、Cashier接口
package com.at.spring.tx;import java.util.List;public interface Cashier {public void checkout(String username,List<String> isbns);}2、CashierImpl实现类
package com.at.spring.tx;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import org.springframework.transaction.annotation.Transactional;@Service("cashier")public class CashierImpl implements Cashier{@Autowiredprivate BookShopService bookShopService;@Transactionalpublic void checkout(String username, List<String> isbns) {for(String isbn:isbns){bookShopService.purchase(username, isbn);}}}3、BookShopService接口
package com.at.spring.tx;public interface BookShopService {public void purchase(String username,String isbn);}4、BookShopServiceImpl实现类
package com.at.spring.tx;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import org.springframework.transaction.annotation.Propagation;import org.springframework.transaction.annotation.Transactional;@Service("bookShopService")public class BookShopServiceImpl implements BookShopService{@Autowiredprivate BookShopDao bookShopDao;//添加事务注解/** * 使用propagation指定事务的传播行为,即当前的事务方法被另外一个事务方法调用时如何使用事务, * 默认的取值为REQUIRED,即使用被调用方法的事务 * REQUIRES_NEW:使用自己的事务,调用的事务方法的事务被挂起。 */@Transactional(propagation=Propagation.REQUIRED)public void purchase(String username, String isbn) {//1、获取书的单价int price = bookShopDao.findBookPriceByIsbn(isbn);//2、更新书的库存bookShopDao.updateBookStock(isbn);//3、更新用户余额bookShopDao.updateUserAccount(username, price);}}
By luoyepiaoxue2014
微博地址: http://weibo.com/luoyepiaoxue2014 点击打开链接
阅读全文
0 0
- Spring中事务的传播行为
- Spring中事务的传播行为
- Spring中事务的传播行为
- Spring事务的传播行为
- Spring事务的传播行为
- Spring事务的传播行为
- Spring事务的传播行为
- Spring事务的传播行为
- spring事务的传播行为
- Spring事务的传播行为
- Spring事务的传播行为
- Spring事务的传播行为
- Spring 事务的传播行为
- Spring事务的传播行为
- Spring事务的传播行为
- Spring事务的传播行为
- Spring事务的传播行为
- Spring事务的传播行为
- 英语博客
- 多线程run和start的区别
- Java注解解析 整理
- asp.net使用服务器控件Image/ImageButton显示本地图片
- ested exception is org.xml.sax.SAXParseException; lineNumber: 23; columnNumber: 106; cvc-elt.1: 找不到
- Spring中事务的传播行为
- JSP指令(转载)
- Arcgis中设置.mxd相对路径
- EJB学习笔记-1-EJB基本概念
- EDA系列(一),EasyEDA介绍
- 数据结构 循环链表 C语言程序实现
- 消失的名称、历史的面貌
- 技术分享有感
- less-Reducing CSS Size(减少css)