fix(sj_1.1.0-beta2): 优化事务问题
This commit is contained in:
parent
27adf03420
commit
3a4382a9ab
@ -149,6 +149,10 @@ public class JobExecutorActor extends AbstractActor {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 事务提交以后再执行任务
|
||||||
|
TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {
|
||||||
|
@Override
|
||||||
|
public void afterCompletion(final int status) {
|
||||||
// 获取工作流的上下文
|
// 获取工作流的上下文
|
||||||
WorkflowTaskBatch workflowTaskBatch = null;
|
WorkflowTaskBatch workflowTaskBatch = null;
|
||||||
Long workflowTaskBatchId = taskExecute.getWorkflowTaskBatchId();
|
Long workflowTaskBatchId = taskExecute.getWorkflowTaskBatchId();
|
||||||
@ -163,6 +167,9 @@ public class JobExecutorActor extends AbstractActor {
|
|||||||
// 执行任务
|
// 执行任务
|
||||||
JobExecutor jobExecutor = JobExecutorFactory.getJobExecutor(job.getTaskType());
|
JobExecutor jobExecutor = JobExecutorFactory.getJobExecutor(job.getTaskType());
|
||||||
jobExecutor.execute(buildJobExecutorContext(taskExecute, job, taskList, workflowTaskBatch));
|
jobExecutor.execute(buildJobExecutorContext(taskExecute, job, taskList, workflowTaskBatch));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
} finally {
|
} finally {
|
||||||
log.debug("准备执行任务完成.[{}]", JsonUtil.toJsonString(taskExecute));
|
log.debug("准备执行任务完成.[{}]", JsonUtil.toJsonString(taskExecute));
|
||||||
final int finalTaskStatus = taskStatus;
|
final int finalTaskStatus = taskStatus;
|
||||||
|
@ -29,6 +29,7 @@ import lombok.RequiredArgsConstructor;
|
|||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import org.springframework.transaction.TransactionStatus;
|
import org.springframework.transaction.TransactionStatus;
|
||||||
|
import org.springframework.transaction.support.TransactionCallback;
|
||||||
import org.springframework.transaction.support.TransactionCallbackWithoutResult;
|
import org.springframework.transaction.support.TransactionCallbackWithoutResult;
|
||||||
import org.springframework.transaction.support.TransactionTemplate;
|
import org.springframework.transaction.support.TransactionTemplate;
|
||||||
|
|
||||||
@ -178,7 +179,6 @@ public class MapReduceTaskGenerator extends AbstractJobTaskGenerator {
|
|||||||
return finalJobTasks;
|
return finalJobTasks;
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
|
||||||
private List<JobTask> createMapJobTasks(final JobTaskGenerateContext context) {
|
private List<JobTask> createMapJobTasks(final JobTaskGenerateContext context) {
|
||||||
List<?> mapSubTask = context.getMapSubTask();
|
List<?> mapSubTask = context.getMapSubTask();
|
||||||
if (CollUtil.isEmpty(mapSubTask)) {
|
if (CollUtil.isEmpty(mapSubTask)) {
|
||||||
@ -194,12 +194,8 @@ public class MapReduceTaskGenerator extends AbstractJobTaskGenerator {
|
|||||||
.eq(JobTask::getLeaf, StatusEnum.YES.getStatus())
|
.eq(JobTask::getLeaf, StatusEnum.YES.getStatus())
|
||||||
);
|
);
|
||||||
|
|
||||||
|
return transactionTemplate.execute(status -> {
|
||||||
List<JobTask> jobTasks = new ArrayList<>(mapSubTask.size());
|
List<JobTask> jobTasks = new ArrayList<>(mapSubTask.size());
|
||||||
|
|
||||||
transactionTemplate.execute(new TransactionCallbackWithoutResult() {
|
|
||||||
@Override
|
|
||||||
protected void doInTransactionWithoutResult(final TransactionStatus status) {
|
|
||||||
|
|
||||||
for (int index = 0; index < mapSubTask.size(); index++) {
|
for (int index = 0; index < mapSubTask.size(); index++) {
|
||||||
Pair<String, Integer> clientInfo = getClientNodeInfo(context);
|
Pair<String, Integer> clientInfo = getClientNodeInfo(context);
|
||||||
|
|
||||||
@ -228,17 +224,16 @@ public class MapReduceTaskGenerator extends AbstractJobTaskGenerator {
|
|||||||
|
|
||||||
// 更新父节点的为非叶子节点
|
// 更新父节点的为非叶子节点
|
||||||
if (Objects.nonNull(parentJobTask)) {
|
if (Objects.nonNull(parentJobTask)) {
|
||||||
JobTask parentJobTask = new JobTask();
|
JobTask parentJobTask1 = new JobTask();
|
||||||
parentJobTask.setId(context.getParentId());
|
parentJobTask1.setId(context.getParentId());
|
||||||
parentJobTask.setLeaf(StatusEnum.NO.getStatus());
|
parentJobTask1.setLeaf(StatusEnum.NO.getStatus());
|
||||||
Assert.isTrue(1 == jobTaskMapper.updateById(parentJobTask),
|
Assert.isTrue(1 == jobTaskMapper.updateById(parentJobTask1),
|
||||||
() -> new SnailJobMapReduceException("更新父节点失败"));
|
() -> new SnailJobMapReduceException("更新父节点失败"));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
return jobTasks;
|
||||||
});
|
});
|
||||||
|
|
||||||
return jobTasks;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private Pair<String, Integer> getClientNodeInfo(JobTaskGenerateContext context) {
|
private Pair<String, Integer> getClientNodeInfo(JobTaskGenerateContext context) {
|
||||||
|
Loading…
Reference in New Issue
Block a user