Spring 状态机实战
前言
在电商领域,很多业务对象都是有状态的,且这些对象的状态又多又复杂。硬编码的方式已经不适合管理当前复杂业务对象的状态。为了适配复杂多变的业务,可以使用状态机来管理状态,统一定义业务对象状态和状态的流转。接下来,本文会重点介绍状态机相关的概念和使用场景。
定义
在介绍状态机之前,先介绍一个工作流(WorkFlow),初学者通常容易将两个概念混淆。工作流(WorkFlow),大体是指业务过程(整体或者部分)在计算机应用环境下的自动化,是对工作流程及其各操作步骤之间业务规则的描述。在计算机系统中,工作流属于计算机支持的协同工作(CSCW)的一部分。
状态机是工作流(WorkFlow)的一种类型,包括顺序工作流(Sequential)和状态机工作流(State Machine)。状态机是有限状态自动机的简称,是现实事物运行规则抽象而成的一个数学模型。
简单说明一下状态机和流程图这两个概念的区别。状态机用来描述一个特定对象的所有可能状态,以及由于各种事件的发生而引起的状态之间的转移。而流程图则用于表示完成某件事情中的各个活动过程,关键的是每一个步骤。
状态机(WorkFlow)
工作流 ...
使用MP进行curd错误记录
字段是数据库的保留字错误
1234567@Data@TableName(value = "t_ods_cdszpt_sjtb_kb_policy_index_d")@NoArgsConstructorpublic class TODSCdsZptSjtbKbPolicyIndexD { @TableField("order") private String order;}
上面的order是mysql的保留关键字,之间按照上面使用在进行crud会报错的,应该修改:
12@TableField("`order`")private String order;
上面是mysql的使用,但是pg数据库却不一样
12@TableField("\"table\"") private String table;
pg:operator does not exist: character varying
123456log.info("蓉政通====== ...
Java虚拟机的内存结构_
Java内存模型对比参考:Java内存模型
文章目录
- [0、序言(运行时数据区)](https://blog.csdn.net/weixin_45393094/article/details/106163605#0_15)
- [1、程序计数器(Program Counter Register)](https://blog.csdn.net/weixin_45393094/article/details/106163605#1Program_Counter_Register_58)
- [2、虚拟机栈(Java Stack)](https://blog.csdn.net/weixin_45393094/article/details/106163605#2Java_Stack_77)
- [3、本地方法栈(Native Method Stack)](https://blog.csdn.net/weixin_45393094/article/details/106163605#3Native_Method_Stack_108)
- [4、方法区(Method Are ...
Spring Batch
1 前言
Spring Batch是一个轻量级的、完善的批处理框架,作为Spring体系中的一员,它拥有灵活、方便、生产可用的特点。在应对高效处理大量信息、定时处理大量数据等场景十分简便。
结合调度框架能更大地发挥Spring Batch的作用。
2 Spring Batch的概念知识
2.1 分层架构
Spring Batch的分层架构图如下:
可以看到它分为三层,分别是:
Application应用层:包含了所有任务batch jobs和开发人员自定义的代码,主要是根据项目需要开发的业务流程等。
Batch Core核心层:包含启动和管理任务的运行环境类,如JobLauncher等。
Batch Infrastructure基础层:上面两层是建立在基础层之上的,包含基础的读入reader和写出writer、重试框架等。
2.2 关键概念
理解下图所涉及的概念至关重要,不然很难进行后续开发和问题分析。
2.2.1 JobRepository
专门负责与数据库打交道,对整个批处理的新增、更新、执行进行记录。所以Spring Batch是需要依赖数据库来管理的。
2.2.2 任务 ...
Stream中的Pipeline理解
基于下面一段代码:
1234public static void main(String[] args) { List<String> list = Arrays.asList("123", "123123"); list.stream().map(item -> item+"").forEach(System.out::print);}
显然,这里的list对象是一个ArrayList实例,debug代码进入stream方法,可以看见进入到Collection.java类中的stream()中
这里的源码如下:
123default Stream<E> stream() { return StreamSupport.stream(spliterator(), false); }
关于分割迭代器的内容会在另外一篇文章详解,这里不再赘述。进入StreamSupport.stream()方法:
1234567StreamSupp ...
高并发Nginx部署
本篇文章主要搭建nginx的双机热备搭建,实现Nginx的高可用。
以下介绍LVS+keepalived+nginx部署。
先来简单介绍下nginx吧:
nginx以占用内存小,并发高著称,常用作反向代理和负载均衡。
nginx高可用方案使用最广的是LVS+keepalived+双机热备,接下来说下怎么部署。
上图为nginx的负载均衡架构图,解决了web容器的的单点故障和高并发的问题,当LVS的master节点故障时,LVS的backup节点会替代主节点;但是当一台nginx故障时,请求将会打到另一台上。
LVS(Linux Virtual Server)即Linux虚拟服务器,实现了基于IP的数据请求负载均衡调度方案;是四层负载均衡。
流程是:客户端发出请求,会先到DNS服务器上,之后解析到LVS负载均衡调度器上,LVS会虚拟出来一个外网IP(即VIP),此时客户端用户会连接到这个VIP,LVS会根据指定的调度算法确定具体要连接到哪一台nginx服务器上。如下图:
主要使用keepalived来做nginx的健康检测和高可用,keepalived的高可用是通过VRRP协议实现的 ...
软件体系结构实验四:
一、 实验内容
任务1:Web Service服务器端程序开发 开发个人所得税计算程序,并发布为Web服务。Idea参考:idea搭建WebService HelloWorld程序_helloworld wsdl-CSDN博客任务2:Web Servic客户端程序开发 网站http://www.webxml.com.cn/提供了诸如天气预报、航班时刻表、中英文翻译等许多公共web service功能,请利用这些web service功能开发一小型应用软件(比如:XXX天气预报系统、XXX航班查询系统等),软件名称自定。
任务1:
源代码地址:
https://github.com/Redbiga/SA4.git
源代码结构:
运行截图:
web配置启动成功:成功发布服务截图:使用服务截图:输入不合法:输入合法:
任务2:Web Service客户端天气查询客户端
源代码地址:
https://github.com/Redbiga/SA4Weather-inquiry.git
功能需求:
查询天气
服务介绍:
源程序代码结构:
运行截图:
遇到的问题: ...
软件体系结构实验二:
一:实验内容:
任务1:仔细阅读文献“主程序-子程序、面向对象、事件系统和管道-过滤软件体系结构实现KWIC”任务2:实现文献中的所有程序并调试通过。任务3:参考和整合以上参考文献,开发“经典软件体系结构教学软件”,用于向用户展示主程序-子程序、面向对象、事件系统和管道-过滤器等软件体系结构风格的基本原理。软件功能及界面可自由设计,但应包括如下内容:(1) 用户可选择四种方法之一对指定的输入文件进行处理,结果可显示在界面上;(2) 能够分别显示各种“体系结构风格”的原理图或文字说明、源程序代码结构、关键函数的程序代码等;
二.软件开发:
环境:
1.JDK8,maven,IDEA2.springboot+thymeleaf3.源代码地址:晓晨/ Sa-experiment2
源代码结构:
总体上采用MVC的结构开发
运行截图:
查看代码功能:测试其他体系结构:
遇到的问题:
1.IDEA文件相对路径写对了但是却找不到的问题:原因是:…/表示上级目录是Linucx下的表示方法解决方法:
1234String root = System.getProperty("us ...
软件体系结构实验三:
一、 实验内容
个人通讯录系统的设计目标是能够轻松地管理个人的联系人信息,包括添加、修改和删除操作。联系人信息包括姓名、住址、电话。整个系统的功能图如下图所示:任务1:采用二层C/S结构实现“个人通讯录系统”;任务2:采用三层C/S结构实现“个人通讯录系统”;任务3:采用B/S结构实现“个人通讯录系统”。
二:实验结果:
实验源代码:
https://github.com/Redbiga/SA3.git开发环境是:JDK:1.8,tomcat:9.0.65
数据库结构:
两层CS体系结构:
逻辑结构:
源程序代码结构:
运行界面截图:
查询:
三层体系结构:
逻辑结构:
源程序代码结构:
运行界面截图:运行结果同两层体系结构,只不过业务逻辑层放在服务层处理了。
BS结构:
逻辑架构:
源代码程序结构:
方案比较:
三层C/S结构相对于二层C/S结构更加灵活,可以更好地实现应用功能的独立性,提高系统和软件的可维护性和可扩展性; 二层C/S结构相对于三层C/S结构来说,缺点在于其数据处理能力较弱;B/S架构相对于C/S架构来说,具有以下优点:① ...
软件体系实验结构一:
一、 实验内容
噪声监测系统通常由声级计(声音传感器)、采集单元和传输单元、PC计算机等部分组成。采集单元从传感器采集声音信息并转换为数字,然后通过传输单元上传到PC端(暂定采用串口通讯方式),PC端通过技术分析后将数据上传至数据库服务器,并在PC端以合适方式展示噪声信息。(1) 采集单元由单片机构成,负责数据采集,并通过串口通讯方式上传给PC端;(2) PC端软件需要使用RS232 SDK来与采集单元通讯(将来可能更换为其它通讯方式)。(3) 操作员即可以实时查看当前采集到的噪声信息,也可以分析数据库服务器中保存的任意时段噪声数据并打印输出分析报告。任务:(1) 利用“4+1”视图建模方法对以上描述的“噪声监测系统”进行软件体系结构设计。(2) 请说明当PC端与采集单元的通讯方式发生变化,你设计的体系结构如何应对?
二.实验步骤:
UML图形工具:
设计考虑:
可维护性:软件应该易于维护和修改。
可重用性:软件应该易于重用。
可扩展性:软件应该易于扩展。
可移植性:软件应该易于移植到不同的平台。
可靠性:软件应该具有高可靠性,即在面对 ...