如何访问spring StateMachine配置数据

问题描述 投票:1回答:1

我有一个弹簧状态机,我用EnumStateMachineConfigurerAdapter注释的@EnableStateMachineFactory配置

一切顺利,我可以使用工厂创建状态机:

AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
context.register(MyStateMachineConfig.class);
context.refresh();
StateMachineFactory stateMachineFactory = context.getBean(StateMachineFactory.class);

但我需要对状态机的配置进行一些自省。基本上我想获得所有最终状态的列表,以供我记录。

这个信息可以在org.springframework.statemachine.config.StateMachineConfig中找到,我可以告诉他们在调试时是否创建了它的实例。但它似乎没有被注册为bean,我无法访问它作为调用:

context.getBean(StateMachineConfig.class);

原因:

org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.springframework.statemachine.config.StateMachineConfig<?, ?>' available
java spring spring-statemachine
1个回答
1
投票

您可以注册自己的StateMachineModelVerifier并访问States数据 - 在isEnd()对象上有一个公共StateData方法。

@Override
public void configure(StateMachineConfigurationConfigurer<States, Events> config)
        throws Exception {
    config
        .withVerifier()
            .enabled(true)
            .verifier(cusomVerifier());
}

@Bean    
public StateMachineModelVerifier customVerifier() {
  return new CustomVerifier();
}

class CustomVerifier extends DefaultStateMachineModelVerifier {
  @Override
  public void verify(StateMachineModel model) {
    super.verify(model); // call the existing sanity check model verifier
    Collection<StateData<State, Event> statesData = model.getStatesData().getStateData(); 
    //log your stuff
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.