Spring StateMachine 可以有多少个 StateMachine?

Inq*_*Shm 1 spring-statemachine

我知道文档提到了“a”语句机,并进一步说明了“用于简单用例”的状态。这些示例定义了注释 @StateMachine,这对我的问题来说不是好兆头。

如果我希望每个业务流程有一个不同的 StateMachine,而不是尝试定义一个日益复杂的状态机,该怎么办?

hov*_*yan 5

可以使用StateMachine 工厂并为每个业务流程获取新实例。

@Configuration
@EnableStateMachineFactory
public class BusinessProcessStateMachineConfig
        extends EnumStateMachineConfigurerAdapter<States, Events> {

    @Override
    public void configure(StateMachineStateConfigurer<States, Events> states)
            throws Exception {
        states
            .withStates()
                .initial(States.S1)
                .end(States.SF)
                .states(EnumSet.allOf(States.class));
    }

}
Run Code Online (Sandbox Code Playgroud)

然后,您可以将工厂注入到您的服务中并获取实例。您甚至可以拥有多个工厂(例如,如果您想在同一代码库中拥有完全不同的状态机)。

@EnableStateMachineFactory(name = "one")
Run Code Online (Sandbox Code Playgroud)

指定名称允许存在多个工厂,并且每个工厂的多个 sm 实例可以注入到服务中。