From 9a63e34b4364fdc25cd1ab959230cad52f148d14 Mon Sep 17 00:00:00 2001 From: "everywhere.z" Date: Tue, 7 Jun 2022 00:43:16 +0800 Subject: [PATCH] =?UTF-8?q?bug=20#I5AVD2=20=E6=96=B0=E7=89=88=E6=9C=AC2.7.?= =?UTF-8?q?0=E4=B8=AD=EF=BC=8C=E5=85=A8=E5=B1=80=E5=88=87=E9=9D=A2?= =?UTF-8?q?=E4=B8=AD=E6=8B=BF=E4=B8=8D=E5=88=B0=E7=BB=84=E4=BB=B6=E7=9A=84?= =?UTF-8?q?=E5=88=AB=E5=90=8D=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../liteflow/aop/ICmpAroundAspect.java | 4 +-- .../yomahub/liteflow/core/NodeComponent.java | 26 +++++++++++++++++-- .../spi/spring/SpringCmpAroundAspect.java | 4 +-- .../liteflow/test/aop/aspect/CmpAspect.java | 10 ++++--- .../liteflow/test/aop/aspect/CmpAspect.java | 10 ++++--- .../liteflow/test/aop/aspect/CmpAspect.java | 10 ++++--- 6 files changed, 46 insertions(+), 18 deletions(-) diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/aop/ICmpAroundAspect.java b/liteflow-core/src/main/java/com/yomahub/liteflow/aop/ICmpAroundAspect.java index 99c97d866..d9b5852cd 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/aop/ICmpAroundAspect.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/aop/ICmpAroundAspect.java @@ -16,7 +16,7 @@ import com.yomahub.liteflow.slot.Slot; */ public interface ICmpAroundAspect { - void beforeProcess(String nodeId, T contextBean); + void beforeProcess(String nodeId, Slot slot); - void afterProcess(String nodeId, T contextBean); + void afterProcess(String nodeId, Slot slot); } diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/core/NodeComponent.java b/liteflow-core/src/main/java/com/yomahub/liteflow/core/NodeComponent.java index ee93d1607..4588d7386 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/core/NodeComponent.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/core/NodeComponent.java @@ -86,15 +86,29 @@ public abstract class NodeComponent{ try{ //前置处理 - this.beforeProcess(this.getNodeId(), slot); + self.beforeProcess(this.getNodeId(), slot); //主要的处理逻辑 self.process(); + //成功后回调方法 + self.onSuccess(); + + //步骤状态设为true cmpStep.setSuccess(true); } catch (Exception e){ + //步骤状态设为false,并加入异常 cmpStep.setSuccess(false); cmpStep.setException(e); + + //执行失败后回调方法 + //这里要注意,失败方法本身抛出错误,只打出堆栈,往外抛出的还是主要的异常 + try{ + self.onError(); + }catch (Exception ex){ + String errMsg = StrUtil.format("[{}]:componnet[{}] onError method happens exception",slot.getRequestId(),this.getClass().getSimpleName()); + LOG.error(errMsg, ex); + } throw e; } finally { stopWatch.stop(); @@ -105,7 +119,7 @@ public abstract class NodeComponent{ cmpStep.setTimeSpent(timeSpent); //后置处理 - this.afterProcess(this.getNodeId(), slot); + self.afterProcess(this.getNodeId(), slot); // 性能统计 if (ObjectUtil.isNotNull(monitorBus)) { @@ -135,6 +149,14 @@ public abstract class NodeComponent{ public abstract void process() throws Exception; + public void onSuccess() throws Exception{ + //如果需要在成功后回调某一个方法,请覆盖这个方法 + } + + public void onError() throws Exception{ + //如果需要在抛错后回调某一段逻辑,请覆盖这个方法 + } + public void afterProcess(String nodeId, Slot slot){ CmpAroundAspectHolder.loadCmpAroundAspect().afterProcess(nodeId, slot); } diff --git a/liteflow-spring/src/main/java/com/yomahub/liteflow/spi/spring/SpringCmpAroundAspect.java b/liteflow-spring/src/main/java/com/yomahub/liteflow/spi/spring/SpringCmpAroundAspect.java index bad846a60..b34d04e72 100644 --- a/liteflow-spring/src/main/java/com/yomahub/liteflow/spi/spring/SpringCmpAroundAspect.java +++ b/liteflow-spring/src/main/java/com/yomahub/liteflow/spi/spring/SpringCmpAroundAspect.java @@ -14,14 +14,14 @@ public class SpringCmpAroundAspect implements CmpAroundAspect { @Override public void beforeProcess(String nodeId, Slot slot) { if (ObjectUtil.isNotNull(ComponentScanner.cmpAroundAspect)) { - ComponentScanner.cmpAroundAspect.beforeProcess(nodeId, slot.getContextBean()); + ComponentScanner.cmpAroundAspect.beforeProcess(nodeId, slot); } } @Override public void afterProcess(String nodeId, Slot slot) { if (ObjectUtil.isNotNull(ComponentScanner.cmpAroundAspect)) { - ComponentScanner.cmpAroundAspect.afterProcess(nodeId, slot.getContextBean()); + ComponentScanner.cmpAroundAspect.afterProcess(nodeId, slot); } } diff --git a/liteflow-testcase-declare-component/src/test/java/com/yomahub/liteflow/test/aop/aspect/CmpAspect.java b/liteflow-testcase-declare-component/src/test/java/com/yomahub/liteflow/test/aop/aspect/CmpAspect.java index d4e4a0f89..785578fda 100644 --- a/liteflow-testcase-declare-component/src/test/java/com/yomahub/liteflow/test/aop/aspect/CmpAspect.java +++ b/liteflow-testcase-declare-component/src/test/java/com/yomahub/liteflow/test/aop/aspect/CmpAspect.java @@ -7,12 +7,14 @@ import com.yomahub.liteflow.slot.Slot; public class CmpAspect implements ICmpAroundAspect { @Override - public void beforeProcess(String nodeId, DefaultContext contextBean) { - contextBean.setData(nodeId, "before"); + public void beforeProcess(String nodeId, Slot slot) { + DefaultContext context = slot.getContextBean(); + context.setData(nodeId, "before"); } @Override - public void afterProcess(String nodeId, DefaultContext contextBean) { - contextBean.setData(nodeId, StrUtil.format("{}_{}", contextBean.getData(nodeId), "after")); + public void afterProcess(String nodeId, Slot slot) { + DefaultContext context = slot.getContextBean(); + context.setData(nodeId, StrUtil.format("{}_{}", context.getData(nodeId), "after")); } } diff --git a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/aop/aspect/CmpAspect.java b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/aop/aspect/CmpAspect.java index d4e4a0f89..785578fda 100644 --- a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/aop/aspect/CmpAspect.java +++ b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/aop/aspect/CmpAspect.java @@ -7,12 +7,14 @@ import com.yomahub.liteflow.slot.Slot; public class CmpAspect implements ICmpAroundAspect { @Override - public void beforeProcess(String nodeId, DefaultContext contextBean) { - contextBean.setData(nodeId, "before"); + public void beforeProcess(String nodeId, Slot slot) { + DefaultContext context = slot.getContextBean(); + context.setData(nodeId, "before"); } @Override - public void afterProcess(String nodeId, DefaultContext contextBean) { - contextBean.setData(nodeId, StrUtil.format("{}_{}", contextBean.getData(nodeId), "after")); + public void afterProcess(String nodeId, Slot slot) { + DefaultContext context = slot.getContextBean(); + context.setData(nodeId, StrUtil.format("{}_{}", context.getData(nodeId), "after")); } } diff --git a/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/aop/aspect/CmpAspect.java b/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/aop/aspect/CmpAspect.java index d4e4a0f89..785578fda 100644 --- a/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/aop/aspect/CmpAspect.java +++ b/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/aop/aspect/CmpAspect.java @@ -7,12 +7,14 @@ import com.yomahub.liteflow.slot.Slot; public class CmpAspect implements ICmpAroundAspect { @Override - public void beforeProcess(String nodeId, DefaultContext contextBean) { - contextBean.setData(nodeId, "before"); + public void beforeProcess(String nodeId, Slot slot) { + DefaultContext context = slot.getContextBean(); + context.setData(nodeId, "before"); } @Override - public void afterProcess(String nodeId, DefaultContext contextBean) { - contextBean.setData(nodeId, StrUtil.format("{}_{}", contextBean.getData(nodeId), "after")); + public void afterProcess(String nodeId, Slot slot) { + DefaultContext context = slot.getContextBean(); + context.setData(nodeId, StrUtil.format("{}_{}", context.getData(nodeId), "after")); } }