fix(sj_1.1.0-beta2): 修复oracle超过1000批量删除失败问题,

This commit is contained in:
opensnail 2024-06-26 21:30:59 +08:00
parent 7e7ea0eb95
commit b9f9a9e00f
2 changed files with 24 additions and 19 deletions

View File

@ -18,12 +18,15 @@ import com.aizuda.snailjob.template.datasource.persistence.po.JobTaskBatch;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.google.common.collect.Lists;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
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.TransactionCallbackWithoutResult; import org.springframework.transaction.support.TransactionCallbackWithoutResult;
import org.springframework.transaction.support.TransactionTemplate; import org.springframework.transaction.support.TransactionTemplate;
import org.springframework.util.CollectionUtils;
import java.time.Duration; import java.time.Duration;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@ -37,21 +40,16 @@ import java.util.List;
* @since 2.1.0 * @since 2.1.0
*/ */
@Component @Component
@Slf4j @RequiredArgsConstructor
public class JobClearLogSchedule extends AbstractSchedule implements Lifecycle { public class JobClearLogSchedule extends AbstractSchedule implements Lifecycle {
// last clean log time // last clean log time
private static Long lastCleanLogTime = 0L; private static Long lastCleanLogTime = 0L;
@Autowired private final SystemProperties systemProperties;
private SystemProperties systemProperties; private final JobTaskBatchMapper jobTaskBatchMapper;
@Autowired private final JobTaskMapper jobTaskMapper;
private JobTaskBatchMapper jobTaskBatchMapper; private final JobLogMessageMapper jobLogMessageMapper;
@Autowired private final TransactionTemplate transactionTemplate;
private JobTaskMapper jobTaskMapper;
@Autowired
private JobLogMessageMapper jobLogMessageMapper;
@Autowired
private TransactionTemplate transactionTemplate;
@Override @Override
public String lockName() { public String lockName() {
@ -122,26 +120,26 @@ public class JobClearLogSchedule extends AbstractSchedule implements Lifecycle {
// Waiting for deletion JobTaskBatchList // Waiting for deletion JobTaskBatchList
List<Long> ids = StreamUtils.toList(partitionTasks, PartitionTask::getId); List<Long> ids = StreamUtils.toList(partitionTasks, PartitionTask::getId);
if (ids == null || ids.size() == 0) { if (CollectionUtils.isEmpty(ids)) {
return; return;
} }
jobTaskBatchMapper.deleteBatchIds(ids); Lists.partition(ids, 500).forEach(partIds -> jobTaskBatchMapper.deleteByIds(ids));
// Waiting for deletion JobTaskList // Waiting for deletion JobTaskList
List<JobTask> jobTaskList = jobTaskMapper.selectList(new LambdaQueryWrapper<JobTask>().in(JobTask::getTaskBatchId, ids)); List<JobTask> jobTaskList = jobTaskMapper.selectList(new LambdaQueryWrapper<JobTask>().in(JobTask::getTaskBatchId, ids));
if (jobTaskList == null || jobTaskList.size() == 0) { if (CollectionUtils.isEmpty(jobTaskList)) {
return; return;
} }
List<Long> jobTaskListIds = StreamUtils.toList(jobTaskList, JobTask::getId); List<Long> jobTaskListIds = StreamUtils.toList(jobTaskList, JobTask::getId);
jobTaskMapper.deleteBatchIds(jobTaskListIds); Lists.partition(jobTaskListIds, 500).forEach(partIds -> jobTaskMapper.deleteByIds(partIds));
// Waiting for deletion JobLogMessageList // Waiting for deletion JobLogMessageList
List<JobLogMessage> jobLogMessageList = jobLogMessageMapper.selectList(new LambdaQueryWrapper<JobLogMessage>().in(JobLogMessage::getTaskBatchId, ids)); List<JobLogMessage> jobLogMessageList = jobLogMessageMapper.selectList(new LambdaQueryWrapper<JobLogMessage>().in(JobLogMessage::getTaskBatchId, ids));
if (jobLogMessageList == null || jobLogMessageList.size() == 0) { if (CollectionUtils.isEmpty(jobLogMessageList)) {
return; return;
} }
List<Long> jobLogMessageListIds = StreamUtils.toList(jobLogMessageList, JobLogMessage::getId); List<Long> jobLogMessageListIds = StreamUtils.toList(jobLogMessageList, JobLogMessage::getId);
jobTaskMapper.deleteBatchIds(jobLogMessageListIds); Lists.partition(jobLogMessageListIds, 500).forEach(partIds -> jobTaskMapper.deleteByIds(jobLogMessageListIds));
} }
}); });
} }

View File

@ -172,10 +172,17 @@ public class JobLogMergeSchedule extends AbstractSchedule implements Lifecycle {
// 批量删除更新日志 // 批量删除更新日志
if (CollUtil.isNotEmpty(jobLogMessageDeleteBatchIds)) { if (CollUtil.isNotEmpty(jobLogMessageDeleteBatchIds)) {
jobLogMessageMapper.deleteBatchIds(jobLogMessageDeleteBatchIds); List<List<Long>> partition = Lists.partition(jobLogMessageDeleteBatchIds, 500);
for (List<Long> mid : partition) {
jobLogMessageMapper.deleteByIds(mid);
}
} }
if (CollUtil.isNotEmpty(jobLogMessageInsertBatchIds)) { if (CollUtil.isNotEmpty(jobLogMessageInsertBatchIds)) {
jobLogMessageMapper.insertBatch(jobLogMessageInsertBatchIds); List<List<JobLogMessage>> partition = Lists.partition(jobLogMessageInsertBatchIds, 500);
for (List<JobLogMessage> jobLogMessages : partition) {
jobLogMessageMapper.insertBatch(jobLogMessages);
}
} }
} }
}); });