From 85dd27840e752d550aa112348bf06e19f551648e Mon Sep 17 00:00:00 2001 From: lizhongyuan3 Date: Wed, 3 Jan 2024 15:03:14 +0800 Subject: [PATCH] =?UTF-8?q?fix:2.6.0=201=EF=BC=9A=E5=BD=93=E6=9B=B4?= =?UTF-8?q?=E7=BB=86=E9=87=8D=E8=AF=95=E6=AC=A1=E6=95=B0=E6=89=A7=E8=A1=8C?= =?UTF-8?q?=E6=88=90=E5=8A=9F=E4=B9=8B=E5=90=8E=E5=9C=A8=E8=BF=9B=E8=A1=8C?= =?UTF-8?q?=E9=87=8D=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../datasource/persistence/po/JobTask.java | 5 +-- .../utils/LambdaUpdateExpandWrapper.java | 43 ------------------- .../BroadcastClientCallbackHandler.java | 21 +++++---- .../ClusterClientCallbackHandler.java | 25 ++++++----- .../ShardingClientCallbackHandler.java | 27 +++++++----- 5 files changed, 47 insertions(+), 74 deletions(-) delete mode 100644 easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/utils/LambdaUpdateExpandWrapper.java diff --git a/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/persistence/po/JobTask.java b/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/persistence/po/JobTask.java index 12cbd487..e9facf8e 100644 --- a/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/persistence/po/JobTask.java +++ b/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/persistence/po/JobTask.java @@ -1,8 +1,6 @@ package com.aizuda.easy.retry.template.datasource.persistence.po; -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.*; import java.io.Serializable; import java.time.LocalDateTime; @@ -64,6 +62,7 @@ public class JobTask implements Serializable { /** * 重试次数 */ + @TableField(value = "retry_count", update= "%s+1") private Integer retryCount; /** diff --git a/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/utils/LambdaUpdateExpandWrapper.java b/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/utils/LambdaUpdateExpandWrapper.java deleted file mode 100644 index 7254d432..00000000 --- a/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/utils/LambdaUpdateExpandWrapper.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.aizuda.easy.retry.template.datasource.utils; - -import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; -import com.baomidou.mybatisplus.core.toolkit.support.SFunction; - -/** - * LambdaUpdateWrapper 的拓展 支持指定列的自增、自减 - * - * @author lizhongyuan - */ - -public class LambdaUpdateExpandWrapper extends LambdaUpdateWrapper { - - public LambdaUpdateExpandWrapper(Class entityClass) { - super(entityClass); - } - - /** - * 指定列自增 - * - * @param columns 列引用 - * @param value 增长值 - */ - public LambdaUpdateExpandWrapper incrField(SFunction columns, Object value) { - String columnsToString = super.columnToString(columns); - String format = String.format("%s = %s + %s", columnsToString, columnsToString, formatSqlMaybeWithParam("{0}", value)); - setSql(format); - return this; - } - - /** - * 指定列自减 - * - * @param columns 列引用 - * @param value 减少值 - */ - public LambdaUpdateExpandWrapper descField(SFunction columns, Object value) { - String columnsToString = super.columnToString(columns); - String format = String.format("%s = %s - %s", columnsToString, columnsToString, formatSqlMaybeWithParam("{0}", value)); - setSql(format); - return this; - } -} \ No newline at end of file diff --git a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/callback/BroadcastClientCallbackHandler.java b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/callback/BroadcastClientCallbackHandler.java index 49bad874..4e37ce62 100644 --- a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/callback/BroadcastClientCallbackHandler.java +++ b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/callback/BroadcastClientCallbackHandler.java @@ -12,6 +12,8 @@ import com.aizuda.easy.retry.template.datasource.persistence.mapper.JobMapper; import com.aizuda.easy.retry.template.datasource.persistence.mapper.JobTaskMapper; import com.aizuda.easy.retry.template.datasource.persistence.po.Job; import com.aizuda.easy.retry.template.datasource.persistence.po.JobTask; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.toolkit.SqlHelper; import com.aizuda.easy.retry.template.datasource.utils.LambdaUpdateExpandWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.aizuda.easy.retry.common.core.enums.JobTaskTypeEnum; @@ -48,16 +50,19 @@ public class BroadcastClientCallbackHandler extends AbstractClientCallbackHandle } if (jobTask.getRetryCount() < job.getMaxRetryTimes()) { // 更新重试次数 - jobTaskMapper.update(null, new LambdaUpdateExpandWrapper<>(JobTask.class) - .incrField(JobTask::getRetryCount, 1) + JobTask updateJobTask = new JobTask(); + updateJobTask.setRetryCount(1); + boolean success = SqlHelper.retBool(jobTaskMapper.update(updateJobTask, Wrappers.lambdaUpdate() .lt(JobTask::getRetryCount, job.getMaxRetryTimes()) .eq(JobTask::getId, context.getTaskId()) - ); - RealJobExecutorDTO realJobExecutor = JobTaskConverter.INSTANCE.toRealJobExecutorDTO(JobTaskConverter.INSTANCE.toJobExecutorContext(job), jobTask); - realJobExecutor.setClientId(ClientInfoUtils.clientId(jobTask.getClientInfo())); - ActorRef actorRef = ActorGenerator.jobRealTaskExecutorActor(); - actorRef.tell(realJobExecutor, actorRef); - // TODO 记录日志 + )); + if (success) { + RealJobExecutorDTO realJobExecutor = JobTaskConverter.INSTANCE.toRealJobExecutorDTO(JobTaskConverter.INSTANCE.toJobExecutorContext(job), jobTask); + realJobExecutor.setClientId(ClientInfoUtils.clientId(jobTask.getClientInfo())); + ActorRef actorRef = ActorGenerator.jobRealTaskExecutorActor(); + actorRef.tell(realJobExecutor, actorRef); + // TODO 记录日志 + } return; } } diff --git a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/callback/ClusterClientCallbackHandler.java b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/callback/ClusterClientCallbackHandler.java index 33e0764f..220539ab 100644 --- a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/callback/ClusterClientCallbackHandler.java +++ b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/callback/ClusterClientCallbackHandler.java @@ -14,6 +14,8 @@ import com.aizuda.easy.retry.template.datasource.persistence.mapper.JobMapper; import com.aizuda.easy.retry.template.datasource.persistence.mapper.JobTaskMapper; import com.aizuda.easy.retry.template.datasource.persistence.po.Job; import com.aizuda.easy.retry.template.datasource.persistence.po.JobTask; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.toolkit.SqlHelper; import com.aizuda.easy.retry.template.datasource.utils.LambdaUpdateExpandWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.aizuda.easy.retry.common.core.enums.JobTaskTypeEnum; @@ -63,18 +65,21 @@ public class ClusterClientCallbackHandler extends AbstractClientCallbackHandler } String newClient = ClientInfoUtils.generate(serverNode); // 更新重试次数 - jobTaskMapper.update(null, new LambdaUpdateExpandWrapper<>(JobTask.class) - .incrField(JobTask::getRetryCount, 1) - .set(JobTask::getClientInfo, newClient) + JobTask updateJobTask = new JobTask(); + updateJobTask.setClientInfo(newClient); + updateJobTask.setRetryCount(1); + boolean success = SqlHelper.retBool(jobTaskMapper.update(updateJobTask, Wrappers.lambdaUpdate() .lt(JobTask::getRetryCount, job.getMaxRetryTimes()) .eq(JobTask::getId, context.getTaskId()) - ); - RealJobExecutorDTO realJobExecutor = JobTaskConverter.INSTANCE.toRealJobExecutorDTO(JobTaskConverter.INSTANCE.toJobExecutorContext(job), jobTask); - realJobExecutor.setClientId(ClientInfoUtils.clientId(newClient)); - ActorRef actorRef = ActorGenerator.jobRealTaskExecutorActor(); - // 执行重试操作 - actorRef.tell(realJobExecutor, actorRef); - // TODO 记录日志 + )); + // 更新成功执行重试 + if (success) { + RealJobExecutorDTO realJobExecutor = JobTaskConverter.INSTANCE.toRealJobExecutorDTO(JobTaskConverter.INSTANCE.toJobExecutorContext(job), jobTask); + realJobExecutor.setClientId(ClientInfoUtils.clientId(newClient)); + ActorRef actorRef = ActorGenerator.jobRealTaskExecutorActor(); + actorRef.tell(realJobExecutor, actorRef); + // TODO 记录日志 + } return; } } diff --git a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/callback/ShardingClientCallbackHandler.java b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/callback/ShardingClientCallbackHandler.java index df3db518..e8dc774d 100644 --- a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/callback/ShardingClientCallbackHandler.java +++ b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/callback/ShardingClientCallbackHandler.java @@ -16,6 +16,8 @@ import com.aizuda.easy.retry.template.datasource.persistence.mapper.JobMapper; import com.aizuda.easy.retry.template.datasource.persistence.mapper.JobTaskMapper; import com.aizuda.easy.retry.template.datasource.persistence.po.Job; import com.aizuda.easy.retry.template.datasource.persistence.po.JobTask; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.toolkit.SqlHelper; import com.aizuda.easy.retry.template.datasource.utils.LambdaUpdateExpandWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.aizuda.easy.retry.common.core.enums.JobTaskTypeEnum; @@ -61,17 +63,22 @@ public class ShardingClientCallbackHandler extends AbstractClientCallbackHandler RegisterNodeInfo serverNode = RandomUtil.randomEle(nodes.toArray(new RegisterNodeInfo[0])); String newClient = ClientInfoUtils.generate(serverNode); // 更新重试次数 - jobTaskMapper.update(null, new LambdaUpdateExpandWrapper<>(JobTask.class) - .incrField(JobTask::getRetryCount, 1) - .set(JobTask::getClientInfo, newClient) - .lt(JobTask::getRetryCount, job.getMaxRetryTimes()) - .eq(JobTask::getId, context.getTaskId()) + JobTask updateJobTask = new JobTask(); + updateJobTask.setClientInfo(newClient); + updateJobTask.setRetryCount(1); + boolean success = SqlHelper.retBool( + jobTaskMapper.update(updateJobTask, Wrappers.lambdaUpdate() + .lt(JobTask::getRetryCount, job.getMaxRetryTimes()) + .eq(JobTask::getId, context.getTaskId()) + ) ); - RealJobExecutorDTO realJobExecutor = JobTaskConverter.INSTANCE.toRealJobExecutorDTO(JobTaskConverter.INSTANCE.toJobExecutorContext(job), jobTask); - realJobExecutor.setClientId(ClientInfoUtils.clientId(newClient)); - ActorRef actorRef = ActorGenerator.jobRealTaskExecutorActor(); - actorRef.tell(realJobExecutor, actorRef); - // TODO 记录日志 + if (success) { + RealJobExecutorDTO realJobExecutor = JobTaskConverter.INSTANCE.toRealJobExecutorDTO(JobTaskConverter.INSTANCE.toJobExecutorContext(job), jobTask); + realJobExecutor.setClientId(ClientInfoUtils.clientId(newClient)); + ActorRef actorRef = ActorGenerator.jobRealTaskExecutorActor(); + actorRef.tell(realJobExecutor, actorRef); + // TODO 记录日志 + } return; } }