【问题标题】:StateMachineInterceptor missed after restoring state machine恢复状态机后状态机拦截器丢失
【发布时间】:2023-01-13 01:22:38
【问题描述】:

我的状态机有问题。重新运行我的服务后,恢复的状态机缺少 StateMachineInterceptor,这是我在第一次创建状态机实例时添加的。

拦截器对我来说很重要,因为每次转换后都会进行一些后处理,而监听器看起来不适合它(我需要在默认方法中使用 stateMachineInstance)

所有相关代码位于下方:

public class StateMachineConfig extends EnumStateMachineConfigurerAdapter<S,E>{
@Override
    public void configure(StateMachineConfigurationConfigurer<S, E> config) throws Exception {
        config
            .withPersistence()
            .runtimePersister(stateMachinePersister);
        config
            .withConfiguration()
            .autoStartup(false)
            .listener(listener);
    }

状态机服务配置:

    @Configuration
@RequiredArgsConstructor
public class StateMachineServiceConfig {

    private final StateMachineFactory<S, E> factory;
    private final StateMachineRuntimePersister<S, E, String> stateMachinePersister;

    @Bean
    public StateMachineService<S, E> stateMachineService() {
        return new DefaultStateMachineService<>(factory, stateMachinePersister);
    }
}

我的坚持者:

@Configuration
public class StateMachinePersistenceConfiguration {
    @Bean
    public StateMachineRuntimePersister<S, E, String> stateMachinePersister(
            final JpaStateMachineRepository jpaStateMachineRepository) {
        return new JpaPersistingStateMachineInterceptor<>(jpaStateMachineRepository);
    }
}

我也有点困惑,因为它只使用 state_machine 表,其他表只创建一次,没有任何变化。

用于创建和恢复状态机的类:

@Service
@RequiredArgsConstructor
@Slf4j
public class RelocationRequestsSSMService {

    private final StateMachineService<S, E> stateMachineService;
    private final MyInterceptor stateMachineInterceptor;

    public StateMachine<S, E> createStateMachine() {
        StateMachine<S, E> stateMachine = stateMachineService.acquireStateMachine(UUID.randomUuid());
        stateMachine.getStateMachineAccessor().withRegion().addStateMachineInterceptor(stateMachineInterceptor);
        log.debug("Created ssm with id: " + stateMachine.getId());
        return stateMachine;
    }


    private StateMachine<S, E> getStateMachineBySsmId(String ssmId) {
        log.debug("Request ssm from persister with id: " + ssmId);
        StateMachine<S, E> stateMachine = stateMachineService.acquireStateMachine(ssmId);
        log.debug("Get ssm from persister with id and uuid: " + stateMachine.getId() + " " + stateMachine.getUuid());
        return stateMachine;
    }

也许 persister 错误地保存了 statemachine 实例,所以如果我配置错误,请帮忙

提前致谢!

【问题讨论】:

    标签: spring-statemachine


    【解决方案1】:

    我也遇到了同样的问题,请问你解决了吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-13
      • 2020-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-01
      • 1970-01-01
      相关资源
      最近更新 更多