Java架构师-十项全能学习笔记(1)
Java架构师-十项全能学习笔记(1)

@Configuration
@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);
} }
Java架构师-十项全能学习笔记(1)的更多相关文章
- Java架构师之路 Spring学习笔记(一) Spring介绍
前言 这是一篇原创的Spring学习笔记.主要记录我学习Spring4.0的过程.本人有四年的Java Web开发经验,最近在面试中遇到面试官总会问一些简单但我不会的Java问题,让我觉得有必要重新审 ...
- 大厂面试官:Java工程师的“十项全能”
想要成为合格的Java程序员或工程师到底需要具备哪些专业技能,在面试之前到底需要准备哪些东西呢?面试时面试官想了解你的什么专业技能,以下都是一个合格Java软件工程师所要具备的. 一.专业技能 熟练的 ...
- 十年阿里java架构师的六大设计原则和项目经验
先看一幅图吧: 这幅图清晰地表达了六大设计原则,但仅限于它们叫什么名字而已,它们具体是什么意思呢?下面我将从原文.译文.理解.应用,这四个方面分别进行阐述. 1.单一职责原则(Single Res ...
- 十年Java架构师分享
看到一篇十年java架构师分享需要掌握的技术点,有时间对照一下,好好学习一下. ------------------------------------------------------------ ...
- 这是一套Java菜鸟到大牛的学习路线之高级教程,由工作了10年的资深Java架构师整理。
这是一套Java菜鸟到大牛的学习路线之高级教程,由工作了10年的资深Java架构师整理. 01-java高级架构师设计-基础深入 J2SE深入讲解 Java多 ...
- Java架构师学习路线
Java架构师,首先要是一个高级java攻城狮,熟练使用各种框架,并知道它们实现的原理.jvm虚拟机原理.调优,懂得jvm能让你写出性能更好的代码;池技术,什么对象池,连接池,线程池-- Java ...
- 阿里巴巴十年Java架构师分享,会了这个知识点的人都去BAT了
1.源码分析专题 详细介绍源码中所用到的经典设计思想,看看大牛是如何写代码的,提升技术审美.提高核心竞争力. 帮助大家寻找分析源码的切入点,在思想上来一次巨大的升华.知其然,并知其所以然.把知识变成自 ...
- [转]阿里巴巴十年Java架构师分享,会了这个知识点的人都去BAT了
1.源码分析专题 详细介绍源码中所用到的经典设计思想,看看大牛是如何写代码的,提升技术审美.提高核心竞争力. 帮助大家寻找分析源码的切入点,在思想上来一次巨大的升华.知其然,并知其所以然.把知识变成自 ...
- 要成为一个 Java 架构师得学习哪些知识?
作者:zhuqz链接:https://www.zhihu.com/question/29031276/answer/54631312来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请 ...
随机推荐
- js判断字符串为空或者为null 简写
if (str1!== null || str1!== undefined || str1!== '') { var str2= str1; } 下面是简写 var str2= str1|| ''; ...
- Linux 安装及管理程序
Linux 安装及管理程序 目录 一.Linux应用程序基础 1.1.应用程序与系统命令的关系 1.2.典型应用程序的目录结构 1.2.常见的软件包封装类型 二.RPM包管理工具 2.1.RPM软件包 ...
- POJ 1082 Calendar Game 原来这题有个超简单的规律
万能的discuss.只需要月份和天数同奇同偶即可,9月30和11月30例外 #include <iostream> #include <cstdio> using names ...
- AcWing 243. 一个简单的整数问题2
给定一个长度为N的数列A,以及M条指令,每条指令可能是以下两种之一: 1."C l r d",表示把 A[l],A[l+1],-,A[r] 都加上 d. 2."Q l r ...
- Raspberry Pi:树莓派开发板配置USB启动系统
准备材料 树莓派4B U盘 TF卡 树莓派基础镜像2020-08-20稳定版(这个系统是必须的并拷录在TF卡) Kali树莓派系统(这个是我想要学习的系统,大家可以准备自己的系统,拷录在U盘的) SD ...
- jar打包
1.jar文件? 学过java的同学应该都听过吧!所以第一站是:打包发布 2.如何把 java 程序编译成 .exe 文件? 通常回答只有两种: 1)一种是制作一个可执行的 JAR 文件包,然后就可以 ...
- Quartz:Quartz添加事务回滚报错
自动任务类: @PersistJobDataAfterExecution @DisallowConcurrentExecution public class ReCodeBack implements ...
- Python 绘制词云
文本内容:data(包含很多条文本) 1.分词: import jieba data_cut = data.apply(jieba.lcut) 2.去除停用词: stoplist.txt:链接:htt ...
- python编程训练
1. 反转字符串: 1 #encoding=utf-8 2 #import string 3 from collections import deque 4 5 def reverse1(string ...
- Kong Admin API — 核心对象
目录 Service API详解 1. 添加服务 2. 列出service列表 3. 查找service 按条件查找service 查找与指定route关联的service 查找与指定Plugin关联 ...