43
43
import java .util .List ;
44
44
import java .util .Locale ;
45
45
import java .util .Set ;
46
+ import java .util .concurrent .CompletableFuture ;
46
47
import java .util .stream .Collectors ;
47
48
48
49
/**
@@ -75,7 +76,6 @@ public class FillDataJobBuilder extends AbstractJobBuilder {
75
76
* @param endDay 每天时间范围 结束范围
76
77
* @throws Exception
77
78
*/
78
- @ Transactional (rollbackFor = Exception .class )
79
79
public void createFillJob (Set <Long > all , Set <Long > run , Long fillId , String fillName , String beginTime , String endTime ,
80
80
String startDay , String endDay ) throws Exception {
81
81
Date startDate = DateUtil .parseDate (startDay , DateUtil .DATE_FORMAT , Locale .CHINA );
@@ -102,54 +102,52 @@ public void createFillJob(Set<Long> all, Set<Long> run, Long fillId, String fill
102
102
* @param endTime 每天时间范围 结束范围
103
103
* @throws Exception
104
104
*/
105
- @ Transactional (rollbackFor = Exception .class )
106
105
public void buildFillDataJobGraph (String fillName , Long fillId , Set <Long > all , Set <Long > run , String triggerDay ,
107
- String beginTime , String endTime ) throws Exception {
106
+ String beginTime , String endTime ) throws Exception {
108
107
List <Long > allList = Lists .newArrayList (all );
109
108
List <List <Long >> partition = Lists .partition (allList , environmentContext .getJobGraphTaskLimitSize ());
110
109
AtomicJobSortWorker sortWorker = new AtomicJobSortWorker ();
110
+ List <ScheduleJobDetails > saveList = Lists .newArrayList ();
111
+ CompletableFuture .allOf (partition .stream ()
112
+ .map (taskKey ->
113
+ CompletableFuture .runAsync (() ->
114
+ fillTaskPartition (fillName , fillId , run , triggerDay , beginTime , endTime , allList , sortWorker , saveList , taskKey ),
115
+ jobGraphBuildPool ))
116
+ .toArray (CompletableFuture []::new )).thenAccept (a -> savaFillJob (saveList )).join ();
117
+ }
111
118
112
- for (List <Long > taskKey : partition ) {
113
- jobGraphBuildPool .submit (() -> {
114
- try {
115
- List <ScheduleJobDetails > saveList = Lists .newArrayList ();
116
- for (Long taskId : taskKey ) {
117
- try {
118
- ScheduleTaskShade scheduleTaskShade = scheduleTaskService
119
- .lambdaQuery ()
120
- .eq (ScheduleTaskShade ::getTaskId , taskId )
121
- .eq (ScheduleTaskShade ::getIsDeleted , Deleted .NORMAL .getStatus ())
122
- .one ();
123
-
124
- if (scheduleTaskShade != null ) {
125
- List <ScheduleJobDetails > jobBuilderBeanList = Lists .newArrayList ();
126
- // 非工作流任务子任务
127
- if (scheduleTaskShade .getFlowId () == 0 ) {
128
- // 生成补数据实例
129
- jobBuilderBeanList = RetryUtil .executeWithRetry (() -> buildJob (scheduleTaskShade , fillName , triggerDay , beginTime , endTime , fillId , sortWorker ),
130
- environmentContext .getBuildJobErrorRetry (), 200 , false );
131
- } else {
132
- Long flowId = scheduleTaskShade .getFlowId ();
133
- if (!allList .contains (flowId )) {
134
- // 生成周期实例
135
- jobBuilderBeanList = RetryUtil .executeWithRetry (() -> buildJob (scheduleTaskShade , fillName , triggerDay , beginTime , beginTime , fillId , sortWorker ),
136
- environmentContext .getBuildJobErrorRetry (), 200 , false );
137
- }
138
- }
139
-
140
- for (ScheduleJobDetails jobBuilderBean : jobBuilderBeanList ) {
141
- addMap (run , saveList , taskId , jobBuilderBean );
142
- }
143
- }
144
- } catch (Exception e ) {
145
- LOGGER .error ("taskKey : {} error:" , taskId , e );
119
+ private void fillTaskPartition (String fillName , Long fillId , Set <Long > run , String triggerDay , String beginTime , String endTime , List <Long > allList , AtomicJobSortWorker sortWorker , List <ScheduleJobDetails > saveList , List <Long > taskKey ) {
120
+ for (Long taskId : taskKey ) {
121
+ try {
122
+ ScheduleTaskShade scheduleTaskShade = scheduleTaskService
123
+ .lambdaQuery ()
124
+ .eq (ScheduleTaskShade ::getTaskId , taskId )
125
+ .eq (ScheduleTaskShade ::getIsDeleted , Deleted .NORMAL .getStatus ())
126
+ .one ();
127
+
128
+ if (scheduleTaskShade != null ) {
129
+ List <ScheduleJobDetails > jobBuilderBeanList = Lists .newArrayList ();
130
+ // 非工作流任务子任务
131
+ if (scheduleTaskShade .getFlowId () == 0 ) {
132
+ // 生成补数据实例
133
+ jobBuilderBeanList = RetryUtil .executeWithRetry (() -> buildJob (scheduleTaskShade , fillName , triggerDay , beginTime , endTime , fillId , sortWorker ),
134
+ environmentContext .getBuildJobErrorRetry (), 200 , false );
135
+ } else {
136
+ Long flowId = scheduleTaskShade .getFlowId ();
137
+ if (!allList .contains (flowId )) {
138
+ // 生成周期实例
139
+ jobBuilderBeanList = RetryUtil .executeWithRetry (() -> buildJob (scheduleTaskShade , fillName , triggerDay , beginTime , endTime , fillId , sortWorker ),
140
+ environmentContext .getBuildJobErrorRetry (), 200 , false );
146
141
}
147
142
}
148
- savaFillJob (saveList );
149
- } catch (Exception e ) {
150
- LOGGER .error ("fill error:" , e );
143
+
144
+ for (ScheduleJobDetails jobBuilderBean : jobBuilderBeanList ) {
145
+ addMap (run , saveList , taskId , jobBuilderBean );
146
+ }
151
147
}
152
- });
148
+ } catch (Exception e ) {
149
+ LOGGER .error ("taskKey : {} error:" , taskId , e );
150
+ }
153
151
}
154
152
}
155
153
@@ -178,7 +176,8 @@ private void addMap(Set<Long> run, List<ScheduleJobDetails> saveList, Long taskI
178
176
*
179
177
* @param allJobList 所有集合
180
178
*/
181
- private void savaFillJob (List <ScheduleJobDetails > allJobList ) {
179
+ @ Transactional (rollbackFor = Exception .class )
180
+ public void savaFillJob (List <ScheduleJobDetails > allJobList ) {
182
181
scheduleJobService .insertJobList (allJobList , EScheduleType .FILL_DATA .getType ());
183
182
Set <ScheduleJobOperatorRecord > operatorJobIds = allJobList
184
183
.stream ()
0 commit comments