
处理的bug,在工作流引擎中,如果同时开启多条线程对同一个环节进行状态更新,若存在线程正在更新,其他访问的线程就会返回一个ActivitiOptimisticLockingException 异常 :
(toString(updatedObject)+" was updated by another transaction concurrently");
经过一些资料查询,问题发生的原理是在serviceTask完成后,更新的ExecutionEntity 是同一条记录,而每一个serviceTask 此时处于
两个不同的线程和事务当中,两个事务彼此不可见,任务开始时获取的ExecutionEntity完成相同,当一个事务成功更新后,
另一个事务就会失败。这样保证了流程的准确执行,当该任务失败后,会在下一个JobExecutor 扫描时重新执行。此时获取的
execution 的版本已经加1,此时任务正常结束。
处理并发问题牵涉到多线程管理。我的处理方式是对前一线程进行xxjoin();保证前一线程结束后才开始下一组的线程处理,避免并发情况的发生
1、oracle数据库当flowable用户存在工作流相关表的时候,ftest用户初始化失败(自动建表失败)。
2、删除flowable用户,ftest初始化成功。
3、再次新建flowable用户,使用flowable用户连接,初始化失败。同时发现,yml文件中,存在flowable。database,schema属性,(解释为:In,some,situations,you,want,to,set,the,schema,to,use,for,table,checks,/,generation,if,the,database,metadata,doesn't,return,that,correctly。)。将其设置为flowable后,启动时抛出异常(SQLFeatureNotSupportedException),异常抛出点为setSchema。查看Druid源码,当调用setSchema会无条件抛出异常。
4、因此可以确定的是,目前遇到的工作流无法初始化,是因为同一个原因引起:数据库中,存在其他已经初始化过的用户/域。
现在大多数的网络请求框架都是使用 Retrofit,本篇文章根据 Retrofit 中,Flowable 创建 和 Ok>
以上就是关于工作流中高并发问题的出错提示和处理方式全部的内容,包括:工作流中高并发问题的出错提示和处理方式、flowable 6.5.0在linux环境实例化异常问题、Retrofit 进阶:Converter 的原理及使用【附 Retrofit 流程】等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)