2020.10.22学习笔记

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值