Spring 状态机可以有多少个状态机?
How many StateMachines can Spring StateMachine have?
我了解到文档提到了 'a' 语句机器和状态 'for simple use cases' 的进一步状态。这些示例定义了注释@StateMachine,这对我的问题来说不是好兆头。
如果我想为每个业务流程配备不同的状态机,而不是尝试定义一个日益复杂的状态机,该怎么办?
可以使用 StateMachine factory 并为每个业务流程获取新实例。
@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));
}
}
然后您可以在您的服务中注入工厂并获取实例。
您甚至可以拥有多个工厂(例如,如果您希望在同一代码库中拥有完全不同的状态机)。
@EnableStateMachineFactory(name = "one")
指定一个名称允许存在多个工厂,并且每个工厂的多个 sm 实例被注入到服务中。
我了解到文档提到了 'a' 语句机器和状态 'for simple use cases' 的进一步状态。这些示例定义了注释@StateMachine,这对我的问题来说不是好兆头。
如果我想为每个业务流程配备不同的状态机,而不是尝试定义一个日益复杂的状态机,该怎么办?
可以使用 StateMachine factory 并为每个业务流程获取新实例。
@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));
}
}
然后您可以在您的服务中注入工厂并获取实例。 您甚至可以拥有多个工厂(例如,如果您希望在同一代码库中拥有完全不同的状态机)。
@EnableStateMachineFactory(name = "one")
指定一个名称允许存在多个工厂,并且每个工厂的多个 sm 实例被注入到服务中。