- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
Activiti工作流面试题及答案
1.说说Activiti的核心模块有哪些?各自主要负责什么工作?
答案:Activiti核心模块主要有5个,都是围绕流程生命周期展开的:
RepositoryService:流程定义的“管家”,负责流程模板(bpmn文件)的部署、查询、删除,比如把画好的报销流程bpmn文件部署到引擎,就是用它;
RuntimeService:流程实例的“操作者”,启动流程(比如员工发起报销申请生成一个实例)、暂停/激活实例、设置流程变量(比如报销金额)都靠它;
TaskService:用户任务的“处理器”,比如查询当前登录用户待审批的任务、签收任务(确认自己处理)、完成任务(审批通过/驳回),核心是跟“人处理的任务”打交道;
HistoryService:流程历史的“记录员”,查已结束的流程实例、某个节点的处理时间、谁处理的,比如财务要追溯去年某笔报销的审批记录,就用它查;
ManagementService:引擎管理的“工具人”,主要用于监控引擎线程、作业(比如定时任务)管理,一般开发中用得少,运维或定制化场景会用到。
2.流程定义部署时,Activiti会在数据库里生成哪些关键表的记录?如果同一流程改了bpmn文件再部署,会有什么影响?
答案:部署流程时,核心会操作3张表:
ACT_RE_DEPLOYMENT:存部署记录,每条记录是一次部署操作,有部署ID、名称、时间;
ACT_RE_PROCDEF:存流程定义信息,比如流程ID、名称、版本号,这里的版本号是关键——同一流程(bpmn里的id相同)重新部署,版本号会自动+1,不会覆盖旧版本;
ACT_GE_BYTEARRAY:存bpmn文件和流程图片的二进制数据,相当于把模板文件存在数据库里,引擎运行时会从这读。
改了bpmn再部署的影响:不会影响正在运行的旧版本流程实例(它们还按旧模板走),新发起的实例会用最新版本;如果想让旧实例切换到新版本,需要手动处理(比如通过API迁移实例),实际项目里一般不这么做,避免混乱。
3.什么是个人任务和组任务?两者在分配和处理上有什么区别?
答案:个人任务是指定给具体某个人的任务,组任务是指定给一个“用户组”(比如“技术评审组”)的任务,区别主要在分配和处理流程:
分配方式:个人任务用assignee属性指定(比如bpmn里写assignee=zhangsan),组任务用candidateUsers(指定多个用户,如candidateUsers=zhangsan,lisi)或candidateGroups(指定用户组,如candidateGroups=tech-group);
处理流程:个人任务分配后,直接在ACT_RU_TASK表的ASSIGNEE_字段有值,对应的用户登录后能直接看到并处理;组任务分配后,ASSIGNEE_字段为空,组内用户需要先“签收任务”(用TaskService的claim方法),签收后ASSIGNEE_才填该用户,变成个人任务,之后才能处理;如果用户不想处理,还能“释放任务”(unclaim),变回组任务让其他人签收。
比如项目里“需求评审”常用组任务,3个评审员都能看到,谁先签收谁处理;“部门经理审批”常用个人任务,直接指定给对应经理。
4.流程变量有什么用?使用时要注意哪些问题?
答案:流程变量是流程实例运行时的“数据载体”,比如报销流程里的“报销金额”“报销事由”“审批意见”,都存在流程变量里,供节点之间传递数据(比如部门经理审批时要看到报销金额,财务付款时要根据金额转账)。
使用时要注意3个问题:
作用域:分“流程实例级”(整个实例都能用)和“任务级”(只有当前任务能用),默认是实例级,别乱用任务级,否则后续节点读不到数据;
类型:尽量用简单类型(String、Integer、Date),别存复杂对象(比如自定义的User类),因为复杂对象需要序列化,一旦类结构改了(比如加个字段),旧实例反序列化会报错;
避免过大:别存文件流、大文本(比如超过10KB的内容),流程变量存在ACT_RU_VARIABLE表,太大了会影响数据库性能,大文件建议存文件服务器,只把文件ID当流程变量。
5.遇到流程实例“卡住”(比如某个节点一直没往下走),怎么排查问题?
答案:实际项目里常遇到,一般分3步排查:
第一步:查数据库表,先找卡住的流程实例ID(比如通过用户ID查ACT_RU_EXECUTION表,PROC_INST_ID_就是实例ID),看ACT_RU_EXECUTION的ACT_ID_字段,知道当前停在哪个节点;再查ACT_RU_TASK表
文档评论(0)