Actviti工作流入门知识 DAY-01

一、什么是Activiti?

Activiti是工作流框架,是解决企业流程管理的解决方案。那流程是什么呢?我们先来看一个请假例子。
在这里插入图片描述也就是说,这种问题就是一种流式的控制管理,因为里面没有包含着回馈,相当于只是一个方向。其实,到这里,就可以得出Activiti的官方定义:

Activiti5是由Alfresco软件在2010年5月17日发布的业务流程管理(BPM)框架,它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。Activiti基于Apache许可的开源BPM平台,创始人Tom Baeyens是JBoss jBPM的项目架构师,它特色是提供了eclipse插件,开发人员可以通过插件直接绘画出业务流程图。

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

三、Activiti的配置文件

activiti.cfg.xml

Activiti核心配置文件,配置流程引擎创建工具的基本参数和数据库连接池参数。

<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.xsd">
	<!-- 创建ProcessEngineConfiguration对象的bean -->
	<bean id="processEngineConfiguration"
		class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">

		<!-- 配置对象的配置信息 :连接数据库,使用MyBatis连接池 -->
		<property name="jdbcUrl"
			value="jdbc:mysql:///activiti?createDatabaseIfNotExist=true" />
		<property name="jdbcDriver" value="com.mysql.jdbc.Driver" />
		<property name="jdbcUsername" value="root" />
		<property name="jdbcPassword" value="root" />
		<!--
		 databaseSchemaUpdate: 设置流程引擎启动和关闭时如何处理数据库表。 
		false(默认):检查数据库表的版本和依赖库的版本, 如果版本不匹配就抛出异常。
		true: 构建流程引擎时,执行检查,如果需要就执行更新。 如果表不存在,就创建。
		create-drop: 构建流程引擎时创建数据库表,关闭流程引擎时删除这些表。
		 -->
		<property name="databaseSchemaUpdate" value="true" />
	</bean>
</beans>

四、核心API
4.1ProcessEngine(核心–服务大管家)

直接看ProcessEngine源码.面向服务编程。

1)在Activiti中最核心的类,其他的类都是由他而来。
2)产生方式:

ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();

在前面看到了多种创建ProcessEngine(流程引擎)的方式,而这里要简化很多,调用ProcessEngines的getDefaultProceeEngine方法时会自动加载classpath下名为activiti.cfg.xml文件。

3)可以产生RepositoryService

RepositoryService repositoryService = defaultProcessEngine.getRepositoryService();

4)可以产生RuntimeService

RuntimeService runtimeService = defaultProcessEngine.getRuntimeService();

5)可以产生TaskService

TaskService taskService = defaultProcessEngine.getTaskService();

五、Activiti流程部署的方法
部署流程定义也可以认为是增加流程定义。

/**
	 * ①:获取核心对象ProcessEngine
	 * ②:分析需求,通过核心对象获取对应的"服务实例"
	 * ③:使用服务的方法做事情
	 * 三张表:
	 *   1)act_re_deployment 	部署信息表:部署一次就有一条记录
         2)act_re_procdef  	流程定义数据表 :部署一次,就产生一个流程,有一个流程定义数据
		 3)act_ge_bytearray		二进制数据表:一个流程定义会有有两个2机制数据:.bpmn和png的数据
	//部署一个流程定义
	 */
	@Test
	public void deployTest() {
	
		// 1、获取核心对象
		ProcessEngine processEngine=ProcessEngines.getDefaultProcessEngine();
		// 2、分析需求,通过核心对象获取对应的“服务实例”
		RepositoryService repositoryService = processEngine.getRepositoryService();
		//通过仓库服务创建一个部署builder
		DeploymentBuilder builder = repositoryService.createDeployment();
		//添加部署的资源文件:必须添加两个文件,png文件可以不添加,自动添加,但是自动添加后在数据库看到是乱码的、在classpath下按照名字加载
		builder.addClasspathResource("MyProcess.bpmn").addClasspathResource("MyProcess.png");
		// 3、使用服务的方法做事情
		//部署
		builder.deploy();
	}

说明:
1)首先获得默认的流程引擎,在创建时会自动加载classpath下activiti.cfg.xml

2)通过流程引擎获取了一个RepositoryService对象->仓库服务对象

3由仓库的服务对象产生一个部署对象配置对象,用来封装部署环境的相关配置。

4)可以看出这是一个链式编程,在部署配置对象中设置显示名,上传规则文件相对classpath的地址。

5)部署,也是往数据库中存储流程定义的过程。

6)这一步在数据库中将操作三张表:
a)act_re_deployment
存放流程定义的显示名和部署时间,每部署一次增加一条记录
b)act_re_procdef
存放流程定义的属性信息,部署每个新的流程定义都会在这张表中增加一条记录。
c)act_ge_bytearray

存储流程定义相关的部署信息。即流程定义文档的存放地。每部署一次就会增加两条记录,一条是关于bpmn规则文件的,一条是图片的(如果部署时只指定了bpmn一个文件,activiti会在部署时解析bpmn文件内容自动生成流程图)。两个文件不是很大,都是以二进制形式存储在数据库中。

猜你喜欢

转载自blog.csdn.net/weixin_43849591/article/details/84626932