From 771766f917bd14a48daca40dea2d6f2205d03f1d Mon Sep 17 00:00:00 2001 From: wangli <274027703@qq.com> Date: Wed, 26 Jun 2024 15:59:55 +0800 Subject: [PATCH] =?UTF-8?q?hotfix=20-=20=E4=BF=AE=E5=A4=8D=E7=94=9F?= =?UTF-8?q?=E6=88=90=E7=8E=AF=E5=A2=83=E4=B8=AD=E5=8F=91=E7=8E=B0=E7=9A=84?= =?UTF-8?q?,=20=E9=80=9A=E8=BF=87=E5=BC=95=E6=93=8E=E7=9A=84=E5=BC=82?= =?UTF-8?q?=E6=AD=A5=E4=BB=BB=E5=8A=A1=E6=89=A7=E8=A1=8C=E8=BF=87=E7=A8=8B?= =?UTF-8?q?=E4=B8=AD=E6=8A=9B=E5=87=BA=E7=9A=84=20WorkflowEngineException?= =?UTF-8?q?=20=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/conf/FlowableConfiguration.java | 2 ++ .../CustomWorkflowEngineExceptionHandler.java | 34 +++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/job/exception/handle/CustomWorkflowEngineExceptionHandler.java diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/conf/FlowableConfiguration.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/conf/FlowableConfiguration.java index 78bc4806e..15302a561 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/conf/FlowableConfiguration.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/conf/FlowableConfiguration.java @@ -13,6 +13,7 @@ import cn.axzo.workflow.core.engine.job.AsyncRejectTaskJobHandler; import cn.axzo.workflow.core.engine.job.AsyncTransferUserTaskJobHandler; import cn.axzo.workflow.core.engine.job.exception.handle.CustomAsyncJobLogClearTraceExceptionHandler; import cn.axzo.workflow.core.engine.job.exception.handle.CustomAsyncRunnableExceptionExceptionHandler; +import cn.axzo.workflow.core.engine.job.exception.handle.CustomWorkflowEngineExceptionHandler; import cn.axzo.workflow.core.engine.persistence.CustomMybatisHistoricProcessInstanceDataManager; import cn.axzo.workflow.core.service.BpmnProcessActivityService; import cn.axzo.workflow.core.service.ExtAxHiTaskInstService; @@ -88,6 +89,7 @@ public class FlowableConfiguration { configuration.setEnableVerboseExecutionTreeLogging(enableVerboseExecutionTreeLogging); configuration.setCustomAsyncRunnableExecutionExceptionHandlers(Lists.newArrayList( new CustomAsyncJobLogClearTraceExceptionHandler(), + new CustomWorkflowEngineExceptionHandler(), new CustomAsyncRunnableExceptionExceptionHandler())); configuration.setCommandContextFactory(new CustomCommandContextFactory()); }; diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/job/exception/handle/CustomWorkflowEngineExceptionHandler.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/job/exception/handle/CustomWorkflowEngineExceptionHandler.java new file mode 100644 index 000000000..9c9513409 --- /dev/null +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/job/exception/handle/CustomWorkflowEngineExceptionHandler.java @@ -0,0 +1,34 @@ +package cn.axzo.workflow.core.engine.job.exception.handle; + +import cn.axzo.workflow.core.common.exception.WorkflowEngineException; +import lombok.extern.slf4j.Slf4j; +import org.flowable.job.api.JobInfo; +import org.flowable.job.service.JobServiceConfiguration; +import org.flowable.job.service.impl.asyncexecutor.AsyncRunnableExecutionExceptionHandler; + +import java.util.Objects; + +/** + * 解决异步任务执行过程中, 抛出的 WorkflowEngineException 正常的业务异常. + * + * @author wangli + * @since 2024/6/26 15:53 + */ +@Slf4j +public class CustomWorkflowEngineExceptionHandler implements AsyncRunnableExecutionExceptionHandler { + @Override + public boolean handleException(JobServiceConfiguration jobServiceConfiguration, JobInfo job, Throwable e) { + if (getRootCause(e).getClass().isAssignableFrom(WorkflowEngineException.class)) { + log.warn("AsyncApproveTaskJobHandler execute exception info: {}", e.getMessage(), e); + return true; + } + return false; + } + + private Throwable getRootCause(Throwable throwable) { + while (Objects.nonNull(throwable.getCause())) { + throwable = throwable.getCause(); + } + return throwable; + } +}