基于Spring的轻量级工作流框架

本文介绍了一个基于Spring的轻量级工作流框架,它借鉴公交系统模型,通过Bus、Station、Routing等核心接口实现业务流程的模块化管理。框架提供BusContext保存业务上下文,Station作为业务处理节点,Routing负责节点间的路由。通过实例展示了如何创建和配置Station、Routing及Bus,以及如何运行DEMO完成特定业务流程。
摘要由CSDN通过智能技术生成

摘要

该项目是一个基于Spring的工作流框架,主要解决一些业务比较重的系统,使用模块化的方式去分割该系统。既可以有效的管理代理(防止冗余代码),对业务的修改也十分方便。

项目地址

先通俗的介绍一下框架

该框架的灵感来自于现实中的公交系统。公交系统的中最重要的几个元素,及其对工作流框架的对应:
- 乘客:对应工作流框架的中的数据(data)
- 公交车:数据的载体,
- 车站:一个车站可以看成工作流中的一个节点,负责处理“公交车”上的“乘客”。
- 线路:由哪些节点组成一个完整的工作流的处理链
是不是感觉整个公交系统就是一个庞大的工作流处理网,每时每刻都公交车从车站出发,到达一个车站,上下乘客又开往下一个车站(当然前提是不出事故(exception))。

框架中的一些重要接口

BusContext

保存一个业务处理逻辑的上下文环境。

Bus

一个Bus是保存一次业务流程的上下文环境,业务的起始节点、抛异常的时候怎么处理等等。一个业务流都会新建一个bus,让后顺着一个一个节点进行处理。

Station

Station为一个业务流(处理链)中的一个单独的节点。这个节点应该是只依赖于Bus中的上下文环境,根据bus的上下文环境进行处理,并且把处理后的结果(如果有)也放入bus的上下文环境中,供下游的节点使用。
例如下面就是一个Station,从Bus上下文中获取maxValue和minValue,如果之间的差小于10则设置路由的key为OK(Routing根据这个进行路由)

Routing

由于Station之间并没有直接关联,因此Routing负责连接各个Station,每个Station都有一个Routing来负责处理bus到底哪个Station,即可以动态的决定Bus的下一个Station

如何使用

举例子

Station

一个Station就是一个Spring容器管理的Bean(实现了com.lizo.busflow.station.Station接口)。一个station应该是独立的,有一定通用性的业务处理类,例如一个参数检查器,ip控制或一个相对对立的业务逻辑等等。

public class GetDiff implements Station {
   
    public void abstractCalculate(@BusParameter("maxValue") int a, @BusParameter("minValue") int b, Bus bus) {
        if (Math.abs(a - b) < 10) {
 
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值