Execution Starter
受众:开发者 摘要:钩子、管道、责任链共享的执行上下文底座,提供
ExecutionContext、DefaultExecutionContext、ExecutionKey<T>和中止状态。
spring-open-starter-execution 是钩子 / 管道 / 责任链的共同地基。它只提供进程内同步执行模型需要的上下文和类型安全属性,不直接表达“方法增强”“步骤编排”或“规则链传递”。
何时需要关注
| 场景 | 建议 |
|---|---|
| 在钩子 / 管道 / 责任链之间传递 traceId、属性和中止状态 | 使用 Execution |
| 只想写方法外层增强 | 看 钩子 |
| 需要把主流程拆成固定步骤 | 看 管道 |
| 需要规则自己决定是否继续传递 | 看 责任链 |
业务代码通常不需要单独引入 Execution;引入 Hook、Pipeline 或 Chain 时会自然获得它。只有需要自定义上下文、公共 ExecutionKey<T> 或组合三者时,才直接阅读本文。
依赖
xml
<dependency>
<groupId>com.springopen</groupId>
<artifactId>spring-open-starter-execution</artifactId>
</dependency>Java 包名:
text
com.springopen.starter.execution核心类型
| 类型 | 说明 |
|---|---|
ExecutionContext | 共享上下文接口,承载 traceId、attributes 和中止状态 |
DefaultExecutionContext | 默认上下文实现,可直接用于简单组合场景 |
ExecutionKey<T> | 类型安全属性 key,避免跨步骤传参时到处手写字符串和强转 |
ExecutionTermination | 中止快照,记录中止原因和触发点 |
快速示例
java
public final class OrderExecutionKeys {
public static final ExecutionKey<CreateOrderCommand> COMMAND =
ExecutionKey.of("order.command", CreateOrderCommand.class);
public static final ExecutionKey<BigDecimal> PAY_AMOUNT =
ExecutionKey.of("order.pay-amount", BigDecimal.class);
private OrderExecutionKeys() {
}
}java
DefaultExecutionContext context = new DefaultExecutionContext("trace-001");
context.set(OrderExecutionKeys.COMMAND, command);
context.set(OrderExecutionKeys.PAY_AMOUNT, new BigDecimal("99.00"));
CreateOrderCommand command = context.get(OrderExecutionKeys.COMMAND);如果执行链需要同步停止:
java
context.terminate("risk-check-stop");
if (context.isTerminated()) {
ExecutionTermination termination = context.getTermination();
String reason = termination == null ? "unknown" : termination.reason();
throw new IllegalStateException(reason);
}组合钩子 / 管道 / 责任链时可以统一观察这个状态:
- Pipeline 中某个 step 返回
PipelineStepResult.stop(message)后,会写入context.terminate(message)。 - Chain 中某个 handler / inline rule 不继续
proceed,或主动调用context.terminate(message),会让后续组合链路看到context.isTerminated()。
与钩子 / 管道 / 责任链的关系
text
Execution
↑
├── Hook
├── Pipeline
└── Chain- Hook、Pipeline、Chain 可以依赖 Execution。
- Execution 禁止依赖 Hook、Pipeline、Chain。
- Hook、Pipeline、Chain 之间不互相依赖,避免语义倒置和双胞胎执行内核。
使用边界
适合:
- 同一次执行链路内传递 traceId。
- 在多个钩子 / 管道 / 责任链组件间传递类型安全属性。
- 表达进程内同步中止状态。
不适合:
- 替代业务 DTO / Command。
- 存储跨请求、跨进程或可恢复状态。
- 承担队列、调度、工作流、分布式事务或最终一致性。
验证命令
bash
./mvnw -pl spring-open-starters/spring-open-starter-execution -am test -DskipITs -DskipFrontend