批量处理-单次异常-回滚单次内容

批量处理-单次异常-回滚单次内容

批量任务,其中一批次异常,仅回滚 本批次整条线,但 批量任务中的其他任务不影响。

 

 

 解决方案:

1. 任务处理,单独放入 一个类中,在 入口方法上(类上不可加) 加上事务:@Transactional(rollbackFor = Exception.class)

2. 将 批量任务 的 for 循环 中的任务处理 用 try catch 包裹。

示例代码:

批量处理头部:

 1 import com.doctor.assistant.sharding.service.SimpleSave;
 2 import lombok.extern.log4j.Log4j2;
 3 import org.springframework.beans.factory.annotation.Autowired;
 4 import org.springframework.stereotype.Service;
 5 
 6 /**
 7  * @ClassName BussDomain
 8  * @Description 批量处理,单次回滚测试
 9  * @Author wqb
10  * @Version 1.0
11  **/
12 @Log4j2
13 @Service
14 public class BussDomain {
15 
16     @Autowired
17     SimpleSave simpleSave;
18 
19     public void multiInsert(){
20         for (int i = 100; i < 106; i++) {
21             try {
22                 simpleSave.saveGradeDO(i);
23             }catch (Exception e){
24                 System.out.println("发生异常!");
25             }
26         }
27     }
28 
29 }

批量处理,单个任务处理:

 1 import com.doctor.assistant.sharding.mapper.buss.*;
 2 import com.doctor.assistant.sharding.pojo.model.buss.*;
 3 import org.springframework.beans.factory.annotation.Autowired;
 4 import org.springframework.stereotype.Service;
 5 import org.springframework.transaction.annotation.Transactional;
 6 
 7 @Service
 8 public class SimpleSave{
 9 
10     @Autowired
11     TClassDOMapper tClassDOMapper;
12     @Autowired
13     TCourseDOMapper tCourseDOMapper;
14     @Autowired
15     TGradeDOMapper tGradeDOMapper;
16     @Autowired
17     TScoreDOMapper tScoreDOMapper;
18     @Autowired
19     TStudentDOMapper tStudentDOMapper;
20     // 1
21     @Transactional(rollbackFor = Exception.class)
22     public void saveGradeDO(int num){
23         System.out.println();
24         System.out.println("saveGradeDO 当前num="+num);
25         TGradeDO tGradeDO = new TGradeDO();
26         tGradeDO.setId(10+num);
27         tGradeDO.setGDesc("年级10-desc");
28         tGradeDO.setGradeName("年级10");
29         tGradeDOMapper.insert(tGradeDO);
30         this.saveClassDO(num, tGradeDO.getId());
31     }
32 
33     // 2
34     public TClassDO saveClassDO(int num, int gradeId){
35         System.out.println("saveClassDO 当前num="+num);
36         TClassDO tClassDO = new TClassDO();
37         tClassDO.setGradeId(gradeId);
38         tClassDO.setClassName("班级"+(10+num));
39         tClassDO.setDescription("班级"+(10+num)+"-desc");
40         tClassDOMapper.insert(tClassDO);
41         this.saveStudentDO(num, tClassDO.getId());
42         return tClassDO;
43     }
44 
45     public TStudentDO saveStudentDO(int num, int classId){
46         System.out.println("saveStudentDO 当前num="+num);
47         TStudentDO tStudentDO = new TStudentDO();
48         tStudentDO.setId(10+num);
49         tStudentDO.setClassId(classId);
50         tStudentDO.setStudentName("学生"+(10+num));
51         tStudentDO.setDescription("学生"+(10+num)+"-desc");
52         tStudentDOMapper.insert(tStudentDO);
53         this.saveCourseDO(num, tStudentDO.getId());
54         return tStudentDO;
55     }
56 
57     public TCourseDO saveCourseDO(int num, int studentId){
58         System.out.println("saveCourseDO 当前num="+num);
59         TCourseDO tCourseDO = new TCourseDO();
60         tCourseDO.setId(10+num);
61         tCourseDO.setCourseName("课程"+(10+num));
62         tCourseDOMapper.insert(tCourseDO);
63         if(num==103) throw new RuntimeException("异常");
64         this.saveScoreDO(num, studentId, tCourseDO.getId());
65         return tCourseDO;
66     }
67 
68     public TScoreDO saveScoreDO(int num, int studentId, int courseId){
69         System.out.println("saveScoreDO 当前num="+num);
70         TScoreDO tScoreDO = new TScoreDO();
71         tScoreDO.setId(10+num);
72         tScoreDO.setCourseId(courseId);
73         tScoreDO.setStudentId(studentId);
74         tScoreDO.setScore(new Double(80+num));
75         tScoreDOMapper.insert(tScoreDO);
76         return tScoreDO;
77     }
78 }

结果展示:id = 113 的整一批,全插入失败。(t_grade.id = 113、t_class.grade_id = 113、t_student.id = 113 先是成功了,后因 t_corse 报错 回滚了)

t_grade:

t_class: 

  t_student:

t_course:

 

  t_score: 

 

 

posted @ 2021-12-15 22:18  BGStone  阅读(385)  评论(0编辑  收藏  举报