十一、spring自身调用事务失效及两种解决方法- -示列验证
2021-04-14 00:27
标签:map auto none 通过 记录 param 新建 over create 1.事务失效-自身调用(通过REQUIRES、REQUIRES_NEW传播属性):自身调用即调该类自己的方法。
2.1自身调用事务失效解决方法1—在父方法中添加事务 十一、spring自身调用事务失效及两种解决方法- -示列验证 标签:map auto none 通过 记录 param 新建 over create 原文地址:https://www.cnblogs.com/jiarui-zjb/p/13339247.html
同类中方法1(不存在事务)去调用方法2(存在事务),则方法2无法保证该方法的事务性。
示列说明:OrderServiceImpl.insertAndUpdateOrderInfo方法中upateData(updateParam) 发生异常时,insertData(insertParam) 未发生回滚
备注:自身调用时候,无论是以下哪种传播属性均是无效的,因为自身调用时的子方法压根就不会被AOP 代理拦截到以下的这两种方式均经过验证,无法保证子方法事务的有效性
@Transactional(propagation = Propagation.REQUIRES)
@Transactional(propagation = Propagation.REQUIRES_NEW)@Controller
@RequestMapping("/trans")
public class TransactionalController {
@Autowired
OrderService orderService;
@RequestMapping("/test.do")
@ResponseBody
public void getIndex(HttpServletRequest request, HttpServletResponse response, Model model) {
orderService.doSomeThing();
}
}
@Service
public interface OrderService {
/*
*添加订单和修改其他订单信息
* */
public void doSomeThing();
}
@Service
public class OrderServiceImpl implements OrderService {
@Autowired
TransBusiness transBusiness;
@Override
public void doSomeThing() {
insertAndUpdateOrderInfo();
}
@Transactional(propagation = Propagation.REQUIRED)
public void insertAndUpdateOrderInfo(){
Date date = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String updateTime = dateFormat.format(date);
//步骤1:插入订单记录信息
String[] insertParam = {"555555555", "977723233", updateTime, updateTime};
transBusiness.insertData(insertParam);
//步骤2:修改订单记录信息
String[] updateParam = {"1111111111", updateTime, "1"};
transBusiness.upateData(updateParam);
}
}
@Service
public class TransBusiness {
@Autowired
JdbcTemplate dalClient;
public void insertData(String[] param) {
Map
OrderServiceImpl.insertAndUpdateOrderInfo方法中当步骤1执行完成后,数据库中并不会存在该订单记录。当执行步骤2时发生了异常,整个事务发生了回滚。说明才方法解决了1自身调用事务失效的问题。
备注:此处的@Transactional等同于 @Transactional(propagation = Propagation.REQUIRED) 表示支持当前事务,如果没有事务就新建一个事务,这是常见的选择,也是spring默认的事务传播
下一篇:Python内的center函数
文章标题:十一、spring自身调用事务失效及两种解决方法- -示列验证
文章链接:http://soscw.com/index.php/essay/75422.html