如何在StateMachineListener中获取StateContext以及如何配置状态以实现我的状态图?

时间:2018-02-08 03:08:50

标签: spring spring-statemachine

我的第一个问题:

在我的StateMachineConfiguration.class

@Bean
public StateMachineListener<CompanyStatus, CompanyEvents> listener() {
    return new StateMachineListenerAdapter<CompanyStatus, CompanyEvents>() {
        @Override
        public void transition(Transition<CompanyStatus, CompanyEvents> transition) {
            if(transition.getTarget().getId() == CompanyStatus.COMPANY_CREATED) {
                logger.info("公司创建,发送消息到用户服务和菜单服务");
                // how to get stateContext in there?
                StateContext stateContext;
                Message message = new Message.Builder<String>().messageType(CompanyStatus.COMPANY_CREATED.toString()).build();
                messageSender.sendToUaa(message);
                messageSender.sendToRes(message);
            }
        }
    };
}

在我的服务中。

log.debug("Request to save Company : {}", companyDTO);
    Company company = companyMapper.toCmpy(companyDTO);
    company = companyRepository.save(company);
    stateMachine.sendEvent(MessageBuilder
        .withPayload(CompanyEvents.COMPANY_CREATE)
        .setHeader("companyId", company.getId())
        .build());
    return companyMapper.toCmpyDTO(company);

如何在侦听器中获取邮件头[companyId]?

我的第二个问题: statechart

1 个答案:

答案 0 :(得分:0)

StateMachineListener中,您可以使用stateContext方法,该方法可让您访问StateContext。然后,StateContext可以通过其getMessageHeaders访问邮件标头。

原始侦听器接口没有暴露那么多,所以我们不得不添加新方法,该方法暴露了在创建监听器接口之后引入到机器的上下文。这是因为我们不需要破坏东西,我们通常喜欢向后兼容。