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; + } +}