Java架構師-十項全能學習筆記(1)

Java架構師-十項全能學習筆記(1)

download:Java架構師-十項全能 提qu碼:5kkxmarkdown

V(cmL46679910)架構

@Configuration     **V(cmL46679910)**
@EnableStateMachine
public class OrderStateMachineConfig extends EnumStateMachineConfigurerAdapter<OrderState, OrderEvent> {

    @Override
    public void configure(StateMachineStateConfigurer<OrderState, OrderEvent> states) throws Exception {
        states.withStates()
                .initial(OrderState.CREATED)
                .states(EnumSet.allOf(OrderState.class));
    }

    @Override
    public void configure(StateMachineTransitionConfigurer<OrderState, OrderEvent> transitions) throws Exception {
        transitions
                .withExternal()
                    .source(OrderState.CREATED)
                    .target(OrderState.PENDING_PAYMENT)
                    .event(OrderEvent.PLACE_ORDER)
                .and().withExternal()
                    .source(OrderState.PENDING_PAYMENT)
                    .target(OrderState.PENDING_DELIVERY)
                    .event(OrderEvent.PAID)
                .and().withExternal()
                    .source(OrderState.PENDING_DELIVERY)
                    .target(OrderState.ORDER_COMPLETE)
                    .event(OrderEvent.DELIVERED);
    }
}
複製代碼

 

 

 

 

@WithStateMachine
@Slf4j
@Data
public class OrderListener {

    private String orderStatus = OrderState.CREATED.name();

    @OnTransition(target = "PENDING_PAYMENT")
    public void pendingPayment(Message message) {
        log.info("訂單建立,等待付款, status={} header={}",
                OrderState.PENDING_PAYMENT.name(),
                message.getHeaders().get("orderId"));
        // TODO 模擬業務流程
        setOrderStatus(OrderState.PENDING_PAYMENT.name());
    }

    @OnTransition(target = "PENDING_DELIVERY")
    public void pendingDelivery() {
        log.info("訂單已付款,等待發貨, status={} ",
                OrderState.PENDING_DELIVERY.name());
        // TODO 模擬業務流程
        setOrderStatus(OrderState.PENDING_DELIVERY.name());
    }

    @OnTransition(target = "ORDER_COMPLETE")
    public void complete() {
        log.info("訂單完成, status={}",
                OrderState.ORDER_COMPLETE.name());
        // TODO 模擬業務流程
        setOrderStatus(OrderState.ORDER_COMPLETE.name());
    }

}
複製代碼
public class MyRunner implements CommandLineRunner {

    @Resource
    StateMachine<OrderState, OrderEvent> stateMachine;

    @Override
    public void run(String... args) throws Exception {
        stateMachine.start();

        Message message = MessageBuilder
                .withPayload(OrderEvent.PLACE_ORDER)
                .setHeader("orderId", "998")
                .build();
        stateMachine.sendEvent(message);
        stateMachine.sendEvent(OrderEvent.PAID);
        stateMachine.sendEvent(OrderEvent.DELIVERED);
    }
}
複製代碼

 

@SpringBootApplication
public class ApplicationStarter {

    @Bean
    public MyRunner chickenRun() {
        return new MyRunner();
    }

    public static void main(String[] arg) {
        SpringApplication.run(ApplicationStarter.class, arg);
    }

}
複製代碼
相關文章
相關標籤/搜索