java activiti 教程_最近学习工作流 推荐一个activiti 的教程文档「建议收藏」
大家好,又见面了,我是你们的朋友全栈君。
异步操作
activiti通过事务方式执行流程,可以根据你的需求定制。现在开始看一下activiti通常是如何处理事务的。 如果触发了activiti的操作(比如,开始流程,完成任务,触发流程继续执行), activiti会推进流程,直到每个分支都进入等待状态。更抽象的说,它会流程图执行深度优先搜索, 如果每个分支都遇到等待状态,就会返回。等待状态是”稍后”需要执行任务, 就是说activiti会把当前状态保存到数据库中,然后等待下一次触发。 触发可能来自外部,比如用户任务或接收到一个消息,也可能来自activiti本身,比如我们设置了定时器事件。 下面图片展示了这种操作:
我们可以看到包含用户任务,服务任务和定时器事件的流程。完成用户任务,和校验地址是在同一个工作单元中, 所以它们的成功和失败是原子性的。意味着如果服务任务抛出异常,我们要回滚当前事务, 这样流程会退回到用户任务,用户任务就依然在数据库里。 这就是activiti默认的行为。在(1)中应用或客户端线程完成任务。这会执行服务,流程推进,直到遇到一个等待状态, 这里就是定时器(2)。然后它会返回给调用者(3),并提交事务(如果事务是由activiti开启的)。
有的时候,这不是我们想要的。有时我们需要自己控制流程中事务的边界,这样就能把业务逻辑包裹在一起。 这就需要使用异步执行了。参考下面的流程(判断):
这次我们完成了用户任务,生成一个发票,把发票发送给客户。 这次生成发票不在同一个工作单元内了,所以我们不想对用户任务进行回滚,如果生成发票出错了。 所以,我们想让activiti实现的是完成用户任务(1),提交事务,返回给调用者应用。然后在后台的线程中,异步执行生成发票。 后台线程就是activiti的job执行器(其实是一个线程池)周期对数据库的job进行扫描。 所以后面的场景,当我们到达”generate invoice”任务,我们为activiti创建一个稍后执行的job”消息”, 并把它保存到数据库。 job会被job执行器获取并执行。我们也会给本地job执行器一个提醒,告诉它有一个新job,来增加性能。
要想使用这个特性,我们要使用activiti:async=”true”扩展。例子中,服务任务看起来就是这样:
activiti:async可以使用到如下bpmn任务类型中: task, serviceTask, scriptTask, businessRuleTask, sendTask, receiveTask, userTask, subProcess, callActivity
对于userTask,receiveTask和其他等待装填,异步执行的作用是让开始流程监听器运行在一个单独的线程/事务中。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/162654.html原文链接:https://javaforall.cn
相关文章
- java反射菜鸟教程_Java反射
- java遍历文件夹下所有图片_遍历指定文件夹下的所有图片,并复制到指定目录下…
- java 链表长度_Java实现单向链表[通俗易懂]
- 菜鸟教程java_JAVA笔记(菜鸟教程)[通俗易懂]
- MySQL字段类型如何转为java_Java JDBC中,MySQL字段类型到JAVA类型的转换
- java socket详解_Java Socket 编程原理及教程「建议收藏」
- 使用JAVA获取ActiveMQ队列数据和状态
- opencv3编程入门_java基础与入门教程
- 学Java又想搞副业,你确定不来了解一下?文尾更精彩噢
- Java学习-如何编译适配java版本的jar包
- 杨辉三角形(二维坐标基础题)——Java-二维数组版本
- Java基础语法n
- 【错误记录】生成 Java 文档错误 ( Xxx.java:xx: 错误: 编码GBK的不可映射字符 )
- ORA-29532: Java call terminated by uncaught Java exception: string ORACLE 报错 故障修复 远程处理
- MySQL与Java的强强联合:开启智能数据库时代(mysql和java)
- Linux安装Java: 迈出第一步(linux上安装java)
- 实现Linux上的Java环境:从安装到配置(linux安装java环境)
- MySQL数据库开发实践:用 Java 开发中文应用(mysql中文java)
- 时间处理解决Java中Redis过期时间的问题(redisjava过期)
- 快速上手:Java连接Mongodb数据库(java连接mongodb数据库)
- 使用Linux安装Java轻松搞定!(linux java安装)
- Java与Oracle联手赋能全新版本面世(java版本oracle)
- Java快速加载Oracle数据库(java加载oracle)
- Java中Oracle使用实践(java中oracle题)