Class LoopTriggerTraceContext

java.lang.Object
com.codingapi.flow.context.LoopTriggerTraceContext

public class LoopTriggerTraceContext extends Object
循环触发点内存跟踪上下文(被动式循环检测)。

触发点执行时(子流程创建、抄送自动流转等)将标识记录到内存 Map,在时间窗口内同一标识 (同一流程实例 + 同一节点 + 同一触发类型)再次执行即判定为循环。循环产生通常极快, 不会跨越太长的周期,因此标记在时间窗口后由共享调度线程自动清理,内存有界。

相比主动查询(沿 parentId 回溯 / 全量流程记录统计),该机制不主动访问数据库, 仅在触发点记录与对照,运行期开销可忽略。

  • Field Details

    • DEFAULT_WINDOW_MILLIS

      public static final long DEFAULT_WINDOW_MILLIS
      默认检测窗口:30 秒。窗口内重复触发即判定循环,窗口外视为新触发。
      See Also:
  • Method Details

    • trace

      public boolean trace(String key)
      记录触发点并检查是否在默认窗口内重复触发。
      Parameters:
      key - 触发点标识(流程实例 + 节点 + 触发类型)
      Returns:
      true 表示窗口内重复触发(循环)
    • trace

      public boolean trace(String key, long windowMillis)
      记录触发点并检查是否在指定窗口内重复触发。
      Parameters:
      key - 触发点标识
      windowMillis - 检测窗口(毫秒)
      Returns:
      true 表示窗口内重复触发(循环)
    • clearExpired

      public void clearExpired()
      清理窗口外的过期标记。
    • clearByProcess

      public void clearByProcess(String processId)
      清除指定流程实例的全部触发标记。

      子流程重置等"退回重走"场景会作废既有记录链并重新触发下游节点, 旧执行留下的标记不应把合法的重走误判为循环。

      Parameters:
      processId - 流程实例标识
    • clear

      public void clear()
      清空全部标记(测试隔离用)。