diff --git a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/RetryDeadLetterServiceImpl.java b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/RetryDeadLetterServiceImpl.java index b5e865c03..55c47782e 100644 --- a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/RetryDeadLetterServiceImpl.java +++ b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/RetryDeadLetterServiceImpl.java @@ -29,6 +29,7 @@ import com.aizuda.snailjob.template.datasource.persistence.po.*; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; import lombok.RequiredArgsConstructor; +import org.springframework.dao.DuplicateKeyException; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -125,9 +126,13 @@ public class RetryDeadLetterServiceImpl implements RetryDeadLetterService { waitRollbackList.add(retry); } - TaskAccess retryTaskAccess = accessTemplate.getRetryAccess(); - Assert.isTrue(waitRollbackList.size() == retryTaskAccess.insertBatch( waitRollbackList), - () -> new SnailJobServerException("Failed to add retry task")); + try { + TaskAccess retryTaskAccess = accessTemplate.getRetryAccess(); + Assert.isTrue(waitRollbackList.size() == retryTaskAccess.insertBatch( waitRollbackList), + () -> new SnailJobServerException("Failed to add retry task")); + } catch (DuplicateKeyException e) { + throw new SnailJobServerException("Duplicate retry task"); + } Set waitDelRetryDeadLetterIdSet = StreamUtils.toSet(retryDeadLetterList, RetryDeadLetter::getId); Assert.isTrue(waitDelRetryDeadLetterIdSet.size() == retryDeadLetterAccess.delete(