前提:我之前也没有接触过JBPM,在网上寻找JBPM优化的方法很少,这次优化只能自己不断去试,花了不少时间,试了几种方案,有点效果,记录下来供别人参考交流,不能一直白嫖。。。
背景:我们项目是集成jbpm的,功能相对简单。JBPM版本 :7.46.0 final。数据库:oracle。
目的:优化一个接口的调用时间。目前该接口在测试环境平均响应时间7秒左右。
优化前:一个接口 需要调用两次微服务,以及196个sql。几乎都是JBPM自己的东西主要集中在JBPM taskService.getTaskById() 、taskService. complete()两个方法上。主要优化方向就是这些sql。
方案一:更换连接池,原先项目中的连接池使用的是dbcp,换成hikari以后性能提升约15%。
方案二:JBPM的方法和业务单独开两个线程去执行,每个项目不一样,这个就不展开。
方案三:修改hibernate的相关参数,fetch_size,batch等相关的参数,有一些作用,这个主要根据你的sql具体情况修改。
分析日志,sql主要集中在两个方面,一:task参数 大约60个sql。二:audit log 大约80个sql。
task 的参数大约三十个,这些参数会被记录到数据库中去,我优化成 通过JBPM传参只传6个,性能提升很多。非流程必须的参数,尽量不要传。
方案五:日志显示,关闭audit log。 官网上提供了添加audit log 的方法,我对项目反向操作后,发现会启动失败,根据错误改了又改,主要中间还有一层公司封装的东西,最后还是放弃了。不过,研究了发现,JBPM的audit log 是通过processListener 做的。 直接kieSession remove掉就好。