diff --git a/snail-job-server/snail-job-server-job-task/src/main/java/com/aizuda/snailjob/server/job/task/support/schedule/JobClearLogSchedule.java b/snail-job-server/snail-job-server-job-task/src/main/java/com/aizuda/snailjob/server/job/task/support/schedule/JobClearLogSchedule.java index 0e7bdc3cc..11125d592 100644 --- a/snail-job-server/snail-job-server-job-task/src/main/java/com/aizuda/snailjob/server/job/task/support/schedule/JobClearLogSchedule.java +++ b/snail-job-server/snail-job-server-job-task/src/main/java/com/aizuda/snailjob/server/job/task/support/schedule/JobClearLogSchedule.java @@ -28,7 +28,10 @@ import org.springframework.util.CollectionUtils; import java.time.Duration; import java.time.LocalDateTime; +import java.util.HashSet; import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; /** * Job清理日志 一小时运行一次 @@ -108,36 +111,46 @@ public class JobClearLogSchedule extends AbstractSchedule implements Lifecycle { */ public void processJobLogPartitionTasks(List partitionTasks) { + // Waiting for deletion JobTaskBatchList + List partitionTasksIds = StreamUtils.toList(partitionTasks, PartitionTask::getId); + if (CollectionUtils.isEmpty(partitionTasksIds)) { + return; + } + List> idsPartition = Lists.partition(partitionTasksIds, 500); + + Set jobTaskListIds = new HashSet<>(); + Set jobLogMessageListIds = new HashSet<>(); + for (List ids : idsPartition) { + + // Waiting for deletion JobTaskList + List jobTaskList = jobTaskMapper.selectList(new LambdaQueryWrapper() + .select(JobTask::getId) + .in(JobTask::getTaskBatchId, ids)); + if (!CollectionUtils.isEmpty(jobTaskList)) { + Set jobTask = jobTaskList.stream().map(i -> i.getId()).collect(Collectors.toSet()); + jobTaskListIds.addAll(jobTask); + } + // Waiting for deletion JobLogMessageList + List jobLogMessageList = jobLogMessageMapper.selectList(new LambdaQueryWrapper() + .select(JobLogMessage::getId) + .in(JobLogMessage::getTaskBatchId, ids)); + if (!CollectionUtils.isEmpty(jobLogMessageList)) { + Set jobLogMessage = jobLogMessageList.stream().map(i -> i.getId()).collect(Collectors.toSet()); + jobLogMessageListIds.addAll(jobLogMessage); + } + } + transactionTemplate.execute(new TransactionCallbackWithoutResult() { @Override protected void doInTransactionWithoutResult(final TransactionStatus status) { - // Waiting for deletion JobTaskBatchList - List ids = StreamUtils.toList(partitionTasks, PartitionTask::getId); - if (CollectionUtils.isEmpty(ids)) { - return; + idsPartition.forEach(jobTaskMapper::deleteByIds); + if (!CollectionUtils.isEmpty(jobTaskListIds)) { + Lists.partition(jobTaskListIds.stream().toList(), 500).forEach(jobTaskMapper::deleteByIds); } - Lists.partition(ids, 500).forEach(jobTaskBatchMapper::deleteByIds); - - // Waiting for deletion JobTaskList - List jobTaskList = jobTaskMapper.selectList(new LambdaQueryWrapper() - .select(JobTask::getId) - .in(JobTask::getTaskBatchId, ids)); - if (CollectionUtils.isEmpty(jobTaskList)) { - return; + if (!CollectionUtils.isEmpty(jobLogMessageListIds)) { + Lists.partition(jobLogMessageListIds.stream().toList(), 500).forEach(jobLogMessageMapper::deleteByIds); } - List jobTaskListIds = StreamUtils.toList(jobTaskList, JobTask::getId); - Lists.partition(jobTaskListIds, 500).forEach(jobTaskMapper::deleteByIds); - - // Waiting for deletion JobLogMessageList - List jobLogMessageList = jobLogMessageMapper.selectList(new LambdaQueryWrapper() - .select(JobLogMessage::getId) - .in(JobLogMessage::getTaskBatchId, ids)); - if (CollectionUtils.isEmpty(jobLogMessageList)) { - return; - } - List jobLogMessageListIds = StreamUtils.toList(jobLogMessageList, JobLogMessage::getId); - Lists.partition(jobLogMessageListIds, 500).forEach(jobLogMessageMapper::deleteByIds); } }); } diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/application.yml b/snail-job-server/snail-job-server-starter/src/main/resources/application.yml index 2bc0c5b3d..f6d45420a 100644 --- a/snail-job-server/snail-job-server-starter/src/main/resources/application.yml +++ b/snail-job-server/snail-job-server-starter/src/main/resources/application.yml @@ -49,7 +49,7 @@ spring: hikari: connection-timeout: 30000 minimum-idle: 5 - maximum-pool-size: 20 + maximum-pool-size: 100 auto-commit: true idle-timeout: 30000 pool-name: snail_job