2020.10.22学习笔记

it2025-09-18  5

1 Activity工作流

工作流就是"业务过程的部分或整体在计算机应用环境下的自动化",它主要解决的是"使在多个参与者之间按照某种预定义的规则传递文档、信息或任务的过程自动进行,从而实现某个预期的业务目标,或者促使此目标的实现"。

工作流管理系统是一个软件系统,它完成工作量的定义和管理,并按照在系统中预先定义好的工作流逻辑进行工作流实例的执行。工作流管理系统不是企业的业务系统,而是为企业的业务系统的运行提供了一个软件的支撑环境。

主流Java工作流框架:JBPM、Activiti

1.1 Activiti框架开发流程

1.画流程图 2.部署流程图 3.启动流程 4.处理任务节点

1.2 Eclipse插件安装

在线安装:Help --> Install New Software… Name:Activiti BPMN 2.0 designer Location:http://activiti.org/designer/update/

离线安装:eclipse离线安装Activiti Designer插件

在线安装很慢,我是离线安装的,注意Finish之后,右下角会有读条,安装过程中会有安全提示,需要确认,安装结束后会提示重启,重启之后可以 new --> other 会有Activiti的选项。

自动保存图片:window --> preferences --> Activiti --> Save Actions 勾上Create process definition image when saving the diagram

1.3 简单流程图

Properties窗口可以在window -->show view --> other 中找到,用于修改任务名称 本质是XML文件

1.4 流程引擎

1.4.1 依赖

pom.xml

<!-- Activiti --> <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-engine</artifactId> <version>5.22.0</version> </dependency> <!-- mysql connector --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.40</version> </dependency> <!-- junit --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency>

1.4.2 用代码初始化流程引擎

运行后对应的数据库会生成表

public class ActivitiTest { //初始化流程引擎,生成23张表 @Test public void initProcessEngine() { //1.创建一个流程引擎配置对象,基于静态工程的方式创建 ProcessEngineConfiguration configuration=ProcessEngineConfiguration.createStandaloneInMemProcessEngineConfiguration(); //2.配置数据源 configuration.setJdbcUrl("jdbc:mysql://localhost:3306/test"); configuration.setJdbcDriver("com.mysql.jdbc.Driver"); configuration.setJdbcUsername("root"); configuration.setJdbcPassword(""); //3.配置生成策略 configuration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);//没有表就生成,有就用现有的 //4.基于流程配置创建流程引擎 ProcessEngine engine= configuration.buildProcessEngine(); //5.输出引擎的信息 System.out.println(engine.getName()); } }

1.4.3 用Spring初始化流程引擎

创建配置文件

<?xml version="1.0" encoding="UTF-8" ?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration"> <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test1"></property> <property name="jdbcDriver" value="com.mysql.jdbc.Driver"></property> <property name="jdbcUsername" value="root"></property> <property name="jdbcPassword" value=""></property> <property name="databaseSchemaUpdate" value="true"></property> </bean> </beans>

使用方式

@Test public void initProcessEngine() { //读取配置文件 avtiviti.cfg.xml ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine(); System.out.println(defaultProcessEngine.getName()); }

1.5 部署流程

1.5.1 部署代码

//部署流程 @Test public void buildProcess() { //1.获取流程对象 ProcessEngine engine = ProcessEngines.getDefaultProcessEngine(); //2.基于流程引擎对象获取 流程部署服务 对象 RepositoryService service = engine.getRepositoryService(); //3.通过这个service来部署流程图 DeploymentBuilder builder = service.createDeployment(); Deployment deployment = builder.name("请假申请") .addClasspathResource("MyProcess.bpmn") .addClasspathResource("MyProcess.png") .deploy(); //4.输出流程部署对象的信息 System.out.println("流程部署成功"); System.out.println("流程部署Id:"+deployment.getId()); System.out.println("流程部署名称:"+deployment.getName()); }

1.5.2 相关表

act_re_deployment :流程部署的基本信息表 act_re_procdef:流程部署的定义表,跟流程部署信息表是一对一的关系 act_ge_bytearray:流程部署的流程图信息表

1.6 启动流程

1.6.1 启动代码

根据key启动流程

//根据Key启动流程 @Test public void startProcess() { //1.获取流程引擎对象 ProcessEngine engine = ProcessEngines.getDefaultProcessEngine(); //2.获取运行时service RuntimeService service = engine.getRuntimeService(); //3.通过service前期的流程,创建一个流程实例 ProcessInstance instance = service.startProcessInstanceByKey("myProcess"); //4.打印流程实例对象的信息 System.out.println("流程定义ID:"+instance.getProcessDefinitionId()); System.out.println("流程实例ID:"+instance.getId()); }

1.6.2 相关表

act_ru_execution:流程实例信息表 act_ru_task:当前执行到哪个任务节点

1.7 处理任务节点

1.7.1 处理代码

查询任务

//查询任务 @Test public void queryTask() { //1.获取流程引擎 ProcessEngine engine = ProcessEngines.getDefaultProcessEngine(); //2.获取任务service TaskService service = engine.getTaskService(); //3.任务信息 List<Task> list = service.createTaskQuery().list(); //4.罗列任务信息 for(Task task:list) { System.out.println("任务Id:"+task.getId()); System.out.println("任务Name:"+task.getName()); System.out.println("任务处理人:"+task.getAssignee()); System.out.println("任务所属的流程实例Id:"+task.getProcessInstanceId()); System.out.println("任务所属的流程定义Id:"+task.getProcessDefinitionId()); } //完成任务 @Test public void completeTask() { //1.获取流程引擎 ProcessEngine engine = ProcessEngines.getDefaultProcessEngine(); //2.获取任务service TaskService service = engine.getTaskService(); service.complete("5004"); System.out.println("5004当前任务节点已完成,将进入下一个任务节点"); } }

1.8 处理逻辑和处理人

处理逻辑:Gateway:分支 处理人:Properties --> Main Config --> Assignee

通过处理人查找任务

List<Task> list2 = service.createTaskQuery().taskAssignee("").list();

1.9 流程控制

complete:先画那条线走那条

设置连接线上的 Main config中的condition,使用多参数的complete方法跳转 假设连接线上的condition为 ${flag == false} 则

HashMap<String, Object> map=new HashMap<String, Object>(); map.put("flag", false); service.complete("5004",map);

其中5004为想要推进的流程的ID

1.10 Activiti小结

工作流其实就是某些任务分解出来的流程,Activiti框架用表和各种service简化了对应流程的开发,我们可以在图形化的界面上拖动来创建流程图,然后通过service来创建并推进流程实例。

参考链接

1.Activiti工作流-实战篇(用Activiti框架快速开发我们的工作流) 2.Activity工作流(2)-入门安装运行第一个例子 3.eclipse安装activiti工作流插件 4.eclipse离线安装Activiti Designer插件 5.基于SSM+Shiro+Activity+Layui开发企业级项目【完整版】P62~P73

最新回复(0)