我是靠谱客的博主 阳光香水,最近开发中收集的这篇文章主要介绍最佳实践-轻量级事务编程(绕开事务失效的坑)1、代码中开启事务常见问题2、推荐方案3、总结,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1、代码中开启事务常见问题

现象:方法加了@Transactional,同类中方法调用,事务未生效。

原因:采用Spring aop注解事务方式,同类中方法调用不会进入AOP拦截。

2、推荐方案

  1、定义动作执行接口

@FunctionalInterface
public interface IActionService {

   /**
    * 动作执行接口 
    * 事务  多线程 等可以封装
    * 
    */
   void doAction();
}

2、定义事务拦截服务类
/**
 * 事务处理
 * @author peter
 *
 */
@Transactional
@Service
public class TransactionService {
   
   /**
    * 执行事务代码
    */

   public void service(IActionService transaction) {
      transaction.doAction();
   }
   
}

3、项目中lambda表达方式方式应用
transactionService.service(() -> {
               // 这当中是事务处理
               // 计算积分 考虑加速
               Integer points = pointGiveService.reducePoints(current);
                              
               // 考虑并发 做增量更新
               McMemberInfo updateMi = new McMemberInfo();
               updateMi.setId(mi.getId());
               updateMi.setMemberLevelCode(finalMemberLevel.getMemberLevelCode());// 等级编码
               updateMi.setLevelAlias(finalMemberLevel.getMemberLevelName());// 等级别名
               updateMi.setLevelAliasName(finalMemberLevel.getMemberLevelNickName());// 等级中文别名
               updateMi.setCurrentGrowthValue(levelInfo.getGrowthValue() - mi.getCurrentGrowthValue());// 成长值更新  增量
               updateMi.setCurrentRatingValue(levelInfo.getLevelValue() - mi.getCurrentRatingValue());// 定级值更新 增量
               updateMi.setCurrentApplePoints(0 - points);// 更新苹果积分 扣减积分 增量
               updateMi.setUpdated(DateUtil.currentDate());// 更新日期
               updateMi.setLevelDueDate(getLevelDueDate(conf));// 设置等级到期日
            
               // 增量更新
               memberInfoService.updateWithIncre(updateMi);
               
               
               // 中间锁状态 调整为最终锁状态 即已处理状态
               lockMiddleToFinalStatus(current.getNumber());
            });  

3、总结

在第二部分中的第一、第二步固定,第三步根据实际业务处理。

通过这种方式规避同类中无事务A方法调用有事务B方法,B方法事务未走拦截开启的问题。且解决另起事务类并定制参数方法的编程方式。

最后

以上就是阳光香水为你收集整理的最佳实践-轻量级事务编程(绕开事务失效的坑)1、代码中开启事务常见问题2、推荐方案3、总结的全部内容,希望文章能够帮你解决最佳实践-轻量级事务编程(绕开事务失效的坑)1、代码中开启事务常见问题2、推荐方案3、总结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部