今天小编给大家分享的是Spring的轻量级工作流框架基础介绍,相信大部分人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,话不多说,一起往下看吧。
公司主营业务:网站设计制作、成都做网站、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。成都创新互联公司是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。成都创新互联公司推出田林免费做网站回馈大家。该框架的灵感来自于现实中的公交系统。公交系统的中最重要的几个元素,及其对工作流框架的对应:
乘客:对应工作流框架的中的数据(data)
公交车:数据的载体,
车站:一个车站可以看成工作流中的一个节点,负责处理“公交车”上的“乘客”。
线路:由哪些节点组成一个完整的工作流的处理链
是不是感觉整个公交系统就是一个庞大的工作流处理网,每时每刻都公交车从车站出发,到达一个车站,上下乘客又开往下一个车站(当然前提是不出事故(exception))。
保存一个业务处理逻辑的上下文环境。
一个Bus是保存一次业务流程的上下文环境,业务的起始节点、抛异常的时候怎么处理等等。一个业务流都会新建一个bus,让后顺着一个一个节点进行处理。
Station为一个业务流(处理链)中的一个单独的节点。这个节点应该是只依赖于Bus中的上下文环境,根据bus的上下文环境进行处理,并且把处理后的结果(如果有)也放入bus的上下文环境中,供下游的节点使用。 例如下面就是一个Station,从Bus上下文中获取maxValue和minValue,如果之间的差小于10则设置路由的key为OK(Routing根据这个进行路由)
由于Station之间并没有直接关联,因此Routing负责连接各个Station,每个Station都有一个Routing来负责处理bus到底哪个Station,即可以动态的决定Bus的下一个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) { bus.setRoutingKey("ok"); } else { bus.setRoutingKey("no"); } } @Override public String getName() { return null; } }
Routing的一定是要一个对应的Station的,例如可以在xml配置中,根据路由的key为进行选择下一个处理的Station
<!--这个是一个Station--> <bean id="getDiff" class="com.lizo.demo.station.GetDiff"></bean> <!--这个是一个Routing,包含了对应的Station Bean--> <bf:stop id="getDiffStop" ref="getDiff" method="abstractCalculate"> <bf:routing value="ok" to="soutOutOkStop"/> <bf:routing value="no" to="soutOutNoStop"/> </bf:stop>
注意,
后面所说的Station默认是指包含了Routing的Bean(<bf:stop>标签),并不是Station那个Bean
需要ref制定一个Spring bean,使用method制定是由那个method来处理。
默认会使用BusContext的key对应方法的参数名来自动注入,如果有特殊需要,可以使用@BusParameter注解,指定BusContext对应的key,是否是必须(默认是必须的,设置为非必须,会注入默认值)。
一个完整Bus在xml中定义,如下:
<bf:bus id="testBus" start="findMaxStop" maxPath="1000" exception="exceptionStation" finish="endStation" class="xxx.xxx.xxx.myBus"/>
其中:
id: 对应的一个Spring Bean的name
start: 对应工作流开始Routing
maxPath:规定了bus如果处理的次数大于这个数就会跑出异常(防止死循环)
exception:指定当发送异常的时候由哪个Station进行处理,例如一个打错误日志的Station
finish:表示当整个流程处理完以后会由哪个Station最最后处理
class:制定bus的类型,如果为空就使用默认的com.lizo.busflow.bus.DefaultBus
现在有一个业务需求,需要做以下处理
输入一个整型的list
找出大值和最小值
如果大值和最小值的差大于10输出“no”,否则输入“ok” 、 当然真实项目中的业务流程不会这么简单,只是这里使用这个做个例子
<bean id="findMax" class="com.lizo.demo.station.FindMax"/> <bean id="findMin" class="com.lizo.demo.station.FindMin"/> <bean id="soutOutOk" class="com.lizo.demo.station.SoutOutOk"/> <bean id="soutOutNo" class="com.lizo.demo.station.SoutOutNo"/> <bean id="getDiff" class="com.lizo.demo.station.GetDiff">
例如getDiff的核心代码如下:
public class GetDiff implements Station { public void abstractCalculate(@BusParameter("maxValue") int a, @BusParameter("minValue") int b, BusContext busContext) { if (Math.abs(a - b) < 10) { busContext.setRoutingKey("ok"); } else { busContext.setRoutingKey("no"); } } @Override public String getName() { return null; } }
<bf:stop id="findMaxStop" ref="findMax" method="doBusiness"> <bf:routing to="findMinStop"/> </bf:stop> <bf:stop id="findMinStop" ref="findMin" method="doBusiness"> <bf:routing to="getDiffStop"/> </bf:stop> <bf:stop id="getDiffStop" ref="getDiff" method="abstractCalculate"> <bf:routing value="ok" to="soutOutOkStop"/> <bf:routing value="no" to="soutOutNoStop"/> </bf:stop> <bf:stop id="soutOutOkStop" ref="soutOutOk" method="printOk"/> <bf:stopid="soutOutNoStop"ref="soutOutNo"method="printNo"/>
<bf:bus id="testBus" start="findMaxStop" />
public class DemoApplication { public static void main(String[] args) { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:bus-config.xml"); Bus testBus = BusFactory.createNewBus("testBus"); List<Integer> input = Arrays.asList(5, 7, 1, 0, 1, 3, 4, 5, 6, 4); testBus.putContext("intList", input); testBus.run(); testBus = BusFactory.createNewBus("testBus"); input = Arrays.asList(52, 7, 1, -10, 1, 3, 4, 5, 6, 4); testBus.putContext("intList", input); testBus.run(); } }
看完上诉内容,你们对Spring的轻量级工作流框架基础大概了解了吗?如果想了解更多相关文章内容,欢迎关注创新互联行业资讯频道,感谢各位的阅读!
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
网页名称:Spring的轻量级工作流框架基础介绍-创新互联
URL标题:https://www.cdcxhl.com/article40/diidho.html
成都网站建设公司_创新互联,为您提供网站收录、外贸网站建设、定制网站、Google、移动网站建设、网站策划
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联