activiti 流程引擎探索

最近公司项目使用到流程引擎,遇到很多坑,网上资料很少,大多数文章又是你抄我,我抄你,找点资料特别困难,现将自己遇到的问题罗列,供后来学习的大佬们研究:

 

版本:springboot 2.1.6 ,activiti 6.0

 

spring配置

 check-process-definitions 表示不做自动发布检查,如果不配置,activiti会自动检查classpath 下process文件夹,如果没有bpmn 文件 ,activiti 异常,启动报错。

database-schema-update true 代表数据库自动更新,配置为true 才会自动生成activiti业务表
async-executor-activate 配置为true 代表启用监听器,不配置的话,监听器无效

另外,这里提一下,acitivi 监听器应该是多线程的,所以在监听器注入service会报空指针异常,需要自定义类加载工具加载需要注入的bean。

数据库连接

数据库连接时,url 必须 加上nullCatalogMeansCurrent=true 具体原因没仔细研究,只知道如果不配置,activiti 会检测数据库,然后一直抛出某某表已经存在异常。

 

jar 包冲突 

springboot 2.x 整合activiti 必须是6.0及以上版本,springboot启动类需要加上 
@SpringBootApplication(exclude = {SecurityAutoConfiguration.class }) 排除掉activiti 自带的权限包,
因为springboot 有个同名的包,如果不做排除,会引起jar 包冲突。
注意,排除的是org.activiti.spring.boot.SecurityAutoConfiguration,如果包引入错误,排除了springboot 
自带的SecurityAutoConfiguration.class ,将会报错!
 

idea 流程设计器bug

1、idea 设计的流程图task名称、连线名称等中文乱码。 这个网上有教程,但有个坑提示一下,如果按教程修改了idea 安装包里面的idea64.vmpotion 和idea32.vmpotion ,还是中文乱码,那么去C 盘用户目录下搜索idea64.vmpotion 和idea32.vmpotion ,再按教程修改一次,重启idea即可,这种情况是因为你的idea 入口程序并没有使用你安装包下的,而是使用的用户文件夹下的。

2、尽量使用eclipse 做流程图设计。idea 流程图插件actiBpm 最新版是2014年发布的,距今6年, 坑很多,有些没办法填。比如我遇到了以下问题:

a、连线编程起始端无故变成菱形,无法与任务进行连接,我画了很多次,每次画完了,一开始设置各个任务属性,就出现这个问题,画了一天画不出一张完整的图。

b、.bmpn 文件上有画任务节点,转换成.xml 后,或者缺失图像信息

就是没有这个配置,甚至连节点配置也没有。

c、taskservice 节点完全没法在流程图里面配置属性,另外,属性配置完后,如果关闭文件,再打开,所有配置消失,一切重来!!!!!!!!!!!!!

d、最后,如果是用idea 画的流程图,发布成功后,查看实时流程图,会发现流程图连线变曲折,各种钝角、锐角,连线乱穿插,这个问题坑了我很久,最后换成eclipse 画的流程图后,一切正常。同时,idea 画的流程图是导出的png 流程图图片,和原始流程图是不一样的,,,我感觉简直、、、、不是一个东西,不知道大佬们是不是也是这个情况!

流程发布问题

1、bmpn.xml必须改成bmpn20.xml发布!例如,test.bmpn.xml 需要改成test.bmpn20.xml 进行发布,否则发布虽然成功,activiti 业务表act_ge_property 表无数据,后面会报错。

2、如果用外置表单,只能用zip 形式发布,否则找不到formKey 。例如,test.bpmn20.xml,start.form,test.bpmn20.png,三个文件,一起打包成test.zip 进行发布,那么test.bpmn20.xml 中,配置start.form 的formkey 时,应该是test/start.form,否则找不到formkey。

 

还在懵逼的问题:

最后,还有个问题我还在解决,目前没在网上找到相关文章。就是业务表单的回显问题。

比如说,我配置了动态表单或者外置表单后,任务运行中能够查到动态表单和外置表单的键、值,但是任务一旦运行结束,再去查询时,就会报错,task 不存在。

对于这个问题,我的想法是,如果是动态表单,可以将流程变量全部返回,前端通过vue 语法取值,多余的变量直接丢弃,这样的话,最方便,但是冗余数据太多了。

但是对于外置表单,我现在还是懵逼的,首先,任务办理的时候后台返回的是html 页面,前端直接显示,然后用户填写数据后,前端提交数据提交到后台,也就是说,这种方式,前端是没有页面的。

那么任务完成后,既然查不到任务表单,不能再返回html页面(提交的变量可以重历史数据里查询),那前端如何生成页面?我现在的想法是,直接通过formkey 用输出流将.form 文件返回,但是如果这样做,那activiti 外置表单除了绑定一个formkey 之外不是毫无用处吗?如果有大佬看到我的文章,对这个问题有解决方案,还请提示一下,谢谢!

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值