一、核心类
- RepositoryService:部署管理流程资源,如bpmn文件、附件等等;
- RuntimeService:操作运行时的流程;
- TaskService:流程中任务的信息;
- HistoryService:流程的历史信息;
- ManagerService:管理流程引擎的信息。
二、核心表
- ACT_GE_*:General,表示通用表。
- ACT_HI_*:History,保存历史数据,比如执行过的流程实例、变量、任务等等。Activiti默认提供四种历史级别:none(不保存任何历史记录)、activity(保存所有的流程实例、任务、活动信息)、audit(默认级别,保存所有的流程实例、任务、活动、表单属性)、full(最完整的历史记录,详细到日志跟踪)。
- ACT_ID_*:Identity,保存身份信息,比如用户和组之间的关系。Activiti被集成到某一系统时,这些表可以不用,而直接使用现有系统中的用户或组信息。
- ACT_RE_*:Repository,保存一些仓库信息,比如流程定义、流程资源(图片或规则等)。
- ACT_RU_*:Runtime,保存一些流程实例、用户任务、变量等的运行时数据。当流程结束后会立即移除这些数据。
三、使用步骤
(1)编写bpmn文件,画流程图,在application.yml配置文件中【process-definition-location-prefix】标明需要扫描的流程图路径;
(2)创建流程引擎;
(3)获取RepositoryService实例:相当于拿到数据库连接;
(4)使用RepositoryService部署流程:相当于使用RepositoryService操作数据库。此处可设置流程名字、addClassPathResource()绑定流程图、部署流程。
(5)启动流程【RuntimeService】;
(6)创建任务【TaskService】;
(7)根据流程定义处理人等查询,并根据任务ID完成任务:taskService.complete()。
// 1.创建流程引擎
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
// 2.获取RepositoryService实例:相当于拿到数据库连接
RepositoryService repositoryService = processEngine.getRepositoryService();
// 3.使用RepositoryService部署流程:相当于使用RepositoryService操作数据库
Deployment deployment = repositoryService.createDeployment()
.name("请假申请流程") // 设置流程的名称
.addClasspathResource("processes/Leave.bpmn") // 设置流程所用到的资源
.addClasspathResource("processes/Leave.png") // 设置流程所用到的图片
.deploy(); // 部署流程,相当于插入操作
// 4.获取RuntimeService,根据流程定义ID启动流程实例
RuntimeService runtimeService = processEngine.getRuntimeService();
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("myLeave");
// 5.创建TaskService,根据流程key和任务负责人查询此流程(myLeave)下的该负责人(zhangsan)所拥有的任务信息。
TaskService taskService = processEngine.getTaskService();
// 6.获取TaskService,完成任务
TaskService taskService = processEngine.getTaskService();
Task task = taskService.createTaskQuery()
.processDefinitionKey("myLeave")
.taskAssignee("zhangsan")
.singleResult();
if (task != null) {
taskService.complete(task.getId());
}
四、 Activiti和Flowable对比
(一)Flowable的优点:
- 架构灵活:Flowable的架构非常灵活,可以轻松地嵌入到Spring或者其他Java应用中,也可以作为独立的服务运行。
- 扩展性强:Flowable提供了插件机制,可以方便地扩展和定制工作流引擎的功能。
- 高可用性:Flowable支持分布式部署,可以实现高可用性的工作流引擎。
- 维护活跃:Flowable项目有一个活跃的社区,提供了及时的技术支持和更新。
(二)Flowable的缺点:
- 文档相对较少:Flowable相对于Activiti,文档相对较少。
- 社区相对较小:Flowable的社区相对于Activiti,规模较小。
(三)Activiti的优点:
- 文档详细:Activiti的官方文档非常详细,易于新手学习和使用。
- 社区活跃:Activiti的社区规模较大,提供了广泛的技术支持和资源。
- 易于集成:Activiti可以轻松地与Spring集成,也可以作为独立的服务运行。
- 贡献者较多:Activiti是一个比较成熟的工作流引擎,有大量的贡献者和用户,可以提供成熟的解决方案。
(四)Activiti的缺点:
- 扩展性较弱:Activiti的插件机制较为有限,扩展和定制功能不如Flowable方便。
- 可靠性较低:Activiti在一些用户反馈的场景下,存在一些稳定性问题,需要注意。