activit6.0 初步学习(一)基础配置及了解核心api

因公司要求,将自己核实,全部踩坑过得资料写成文档,索性当做博客发出来,给其他朋友灵感以及自己以后回忆。

  1. 核心七大接口、28张表
    1.1 七大接口
      RepositoryService:提供一系列管理流程部署和流程定义的API。
      RuntimeService:在流程运行时对流程实例进行管理与控制。
      TaskService:对流程任务进行管理,例如任务提醒、任务完成和创建任务等。
      IdentityService:提供对流程角色数据进行管理的API,这些角色数据包括用户组、用户及它们之间的关系。
      ManagementService:提供对流程引擎进行管理和维护的服务。
      HistoryService:对流程的历史数据进行操作,包括查询、删除这些历史数据。
      FormService:表单服务。

 

1.2 28张表

act_ge_ 通用数据表,ge是general的缩写
act_hi_ 历史数据表,hi是history的缩写,对应HistoryService接口
act_id_ 身份数据表,id是identity的缩写,对应IdentityService接口
act_re_ 流程存储表,re是repository的缩写,对应RepositoryService接口,存储流程部署和流程定义等静态数据
act_ru_ 运行时数据表,ru是runtime的缩写,对应RuntimeService接口和TaskService接口,存储流程实例和用户任务等动态数据

 

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

定义数据库配置参数:

jdbcUrl: 数据库的JDBC URL。
jdbcDriver: 对应不同数据库类型的驱动。
jdbcUsername: 连接数据库的用户名。
jdbcPassword: 连接数据库的密码。
基于JDBC参数配置的数据库连接 会使用默认的MyBatis连接池。 下面的参数可以用来配置连接池(来自MyBatis参数):
jdbcMaxActiveConnections: 连接池中处于被使用状态的连接的最大值。默认为10。

jdbcMaxIdleConnections: 连接池中处于空闲状态的连接的最大值。jdbcMaxCheckoutTime: 连接被取出使用的最长时间,超过时间会被强制回收。 默认为20000(20秒)。jdbcMaxWaitTime: 这是一个底层配置,让连接池可以在长时间无法获得连接时, 打印一条日志,并重新尝试获取一个连接。(避免因为错误配置导致沉默的操作失败)。 默认为20000(20秒)。

可参考如下示例:

<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">
    <!-- 配置一个流程引擎工厂bean,用于创建流程引擎对象 -->
    <bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
        <property name="jdbcDriver" value="com.microsoft.sqlserver.jdbc.SQLServerDriver" />
        <property name="jdbcUrl" value="jdbc:sqlserver://localhost:1433;DatabaseName=ArchivesManagement" />
        <property name="jdbcUsername" value="sa" />
        <property name="jdbcPassword" value="123456" />

        <property name="databaseSchemaUpdate" value="true" />
        <property name="asyncExecutorActivate" value="false" />
        <property name="mailServerHost" value="mail.my-corp.com" />
        <property name="mailServerPort" value="5025" />
        <!--自定义的事件监听器注入引擎-->
       <!-- <property name="eventListeners">
            <list>
                <bean class="com.controller.ActivitiListener"></bean>
            </list>
        </property>-->
    </bean>
    <bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
        <property name="processEngineConfiguration" ref="processEngineConfiguration" />
    </bean>
</beans>

3.核心API

3.1ProcessEngine

说明:
1) 在Activiti中最核心的类,其他的类都是由他而来。
2)创建工作流引擎

ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

创建ProcessEngine(流程引擎)的方式有很多种,为了简化操作,调用ProcessEngines的getDefaultProceeEngine方法时会自动加载classpath下名为activiti.cfg.xml文件。

 

3) 可以产生RepositoryService,仓库服务

RepositoryService repositoryService = processEngine.getRepositoryService();

 

4) 可以产生RuntimeService,运行时服务

RuntimeService runtimeService = processEngine.getRuntimeService();

 

5) 可以产生TaskService,任务服务

TaskService taskService = processEngine.getTaskService();

3.2RepositoryService

是Activiti的仓库服务类。所谓的仓库指流程定义文档的两个文件:bpmn文件和流程图片。

1) 产生方式

  RepositoryService repositoryService = processEngine.getRepositoryService();

2) 可以产生DeploymentBuilder,用来定义流程部署的相关参数

DeploymentBuilder deploymentBuilder = repositoryService.createDeployment();

 

3) 删除流程定义

repositoryService.deleteDeployment(deploymentId);

 

3.3RuntimeService

是activiti的流程执行服务类。可以从这个服务类中获取很多关于流程执行相关的信息。

3.4TaskService

是activiti的任务服务类。可以从这个类中获取任务的信息。

3.5HistoryService

是activiti的查询历史信息的类。在一个流程执行完成后,这个对象为我们提供查询历史信息。

3.6ProcessDefinition

流程定义类。可以从这里获得资源文件等。

3.7ProcessInstance

代表流程定义的执行实例。如范冰冰请了一天的假,她就必须发出一个流程实例的申请。一个流程实例包括了所有的运行节点。我们可以利用这个对象来了解当前流程实例的进度等信息。流程实例就表示一个流程从开始到结束的最大的流程分支,即一个流程中流程实例只有一个。

3.8Execution

Activiti用这个对象去描述流程执行的每一个节点。在没有并发的情况下,Execution就是同ProcessInstance。流程按照流程定义的规则执行一次的过程,就可以表示执行对象Execution。

如图为ProcessInstance的源代码:

 

从源代码中可以看出ProcessInstance就是Execution。但在现实意义上有所区别:

在单线流程中,如上图的贷款流程,ProcessInstance与Execution是一致的。

这个例子有一个特点:wire money(汇钱)和archive(存档)是并发执行的。这个时候,总线路代表ProcessInstance,而分线路中每个活动代表Execution。

总结:

一个流程中,执行对象可以存在多个,但是流程实例只能有一个。

当流程按照规则只执行一次的时候,那么流程实例就是执行对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值