Activity工作流(二):核心配置
创始人
2025-05-30 13:17:49
0

2. Activiti核心配置

在这里插入图片描述

ProcessEngine流程引擎是Activiti的核心。Activiti默认读取activiti.cfg.xml文件,获得ProcessEngineConfiguration对象,通过ProcessEngineConfiguration创建ProcessEngine。

2.1 ProcessEngineConfiguration配置

### 2.1.1	不使用配置文件
@Test
public void createEngineWithoutXml() {ProcessEngineConfiguration processEngineConfiguration =ProcessEngineConfiguration.createStandaloneInMemProcessEngineConfiguration();processEngineConfiguration.setJdbcDriver("com.mysql.jdbc.Driver");processEngineConfiguration.setJdbcUrl("jdbc:mysql://localhost:3306/activiti?characterEncoding=utf-8");processEngineConfiguration.setJdbcUsername("root");processEngineConfiguration.setJdbcPassword("");processEngineConfiguration.setDatabaseSchemaUpdate("true");ProcessEngine processEngine = processEngineConfiguration.buildProcessEngine();System.out.println(processEngine);
}

2.1.2 读取配置文件

配置文件activiti.cfg.xml,注意配置XML文件其实是一个spring的配置文件。 但不是说Activiti只能用在Spring环境中! 我们只是利用了Spring的解析和依赖注入功能 来构建引擎。读取配置文件一共有五个方法:
1)	ProcessEngineConfiguration.createProcessEngineConfigurationFromResourceDefault();
2)	ProcessEngineConfiguration.createProcessEngineConfigurationFromResource(String resource);
3)	ProcessEngineConfiguration.createProcessEngineConfigurationFromResource(String resource, String beanName);
4)	ProcessEngineConfiguration.createProcessEngineConfigurationFromInputStream(InputStream inputStream);
5)	ProcessEngineConfiguration.createProcessEngineConfigurationFromInputStream(InputStream inputStream, String beanName);










@Testpublic void createEngineWithXml() {//默认读取的是activiti.cfg.xml,并且bean的id必须是processEngineConfiguration
//        ProcessEngineConfiguration processEngineConfiguration =
//                ProcessEngineConfiguration.createProcessEngineConfigurationFromResourceDefault();ProcessEngineConfiguration processEngineConfiguration =ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml");ProcessEngine processEngine = processEngineConfiguration.buildProcessEngine();System.out.println(processEngine);}

如果自定义bean的id,可以这样读取:

ProcessEngineConfiguration processEngineConfiguration =ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml","configuration");

2.1.3 ProcessEngineConfiguration子类

创建ProcessEngineConfiguration时,目前可以使用如下类,以后会更多:

  1. org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration:
    单独运行的流程引擎。Activiti会自己处理事务。 默认,数据库只在引擎启动时检测
    (如果没有Activiti的表或者表结构不正确就会抛出异常)。
  2. org.activiti.engine.impl.cfg.StandaloneInMemProcessEngineConfiguration:
    单元测试时的辅助类。Activiti会自己控制事务。 默认使用H2内存数据库。数据库表会在引擎启动时创建,关闭时删除。
    使用它时,不需要其他配置(除非使用job执行器或邮件功能)。
  3. org.activiti.spring.SpringProcessEngineConfiguration:
    在Spring环境下使用流程引擎。
  4. org.activiti.engine.impl.cfg.JtaProcessEngineConfiguration:
    单独运行流程引擎,并使用JTA事务。

2.1.4 数据库配置

Activiti支持如下数据库:
数据库类型 url示例

h2	jdbc:h2:tcp://localhost/activiti
mysql	jdbc:mysql://localhost:3306/activiti?autoReconnect=true
oracle	jdbc:oracle:thin:@localhost:1521:xe
postgres	jdbc:postgresql://localhost:5432/activiti
db2	jdbc:db2://localhost:50000/activiti
mssql	jdbc:sqlserver://localhost:1433;databaseName=activiti (jdbc.driver=com.microsoft.sqlserver.jdbc.SQLServerDriver) OR jdbc:jtds:sqlserver://localhost:1433/activiti (jdbc.driver=net.sourceforge.jtds.jdbc.Driver)

Activiti可能使用两种方式配置数据库。 第一种方式是定义数据库配置参数,另一种是直接配置DataSource。
直接配置数据库参数,有如下参数: • jdbcUrl: 数据库的JDBC URL。 • jdbcDriver: 对应不同数据库类型的驱动。
• jdbcUsername: 连接数据库的用户名。 • jdbcPassword: 连接数据库的密码。
基于JDBC参数配置的数据库连接 会使用默认的MyBatis连接池。 下面的参数可以用来配置连接池(来自MyBatis参数):
• jdbcMaxActiveConnections: 连接池中处于被使用状态的连接的最大值。默认为10。
• jdbcMaxIdleConnections: 连接池中处于空闲状态的连接的最大值。 • jdbcMaxCheckoutTime:
连接被取出使用的最长时间,超过时间会被强制回收。 默认为20000(20秒)。 • jdbcMaxWaitTime:
这是一个底层配置,让连接池可以在长时间无法获得连接时, 打印一条日志,并重新尝试获取一个连接。(避免因为错误配置导致沉默的操作失败)。
默认为20000(20秒)。 无论你使用JDBC还是DataSource的方式,都可以设置下面的配置: • databaseType:
一般不用设置,因为可以自动通过数据库连接的元数据获取。 只有自动检测失败时才需要设置。 可能的值有:{h2, mysql, oracle,
postgres, mssql, db2}。这个配置会决定使用哪些创建/删除脚本和查询语句。
• databaseSchemaUpdate: 设置流程引擎启动和关闭时如何处理数据库表,可能值如下:

  1. false(默认):检查数据库表的版本和依赖库的版本, 如果版本不匹配就抛出异常。
  2. true: 构建流程引擎时,执行检查,如果需要就执行更新。 如果表不存在,就创建。
  3. create-drop: 构建流程引擎时创建数据库表,
    关闭流程引擎时删除这些表。
    使用数据源的配置参考各种DataSource的使用说明,ProcessEngineConfiguration的dataSource属性引用定义的数据源即可。如2.1.2中使用了DBCP的数据源。

2.2 ProcessEngine创建

@Test
public void createDefaultEngine() {//默认读取的是activiti.cfg.xml,并且bean的id必须是processEngineConfigurationProcessEngine processEngine= ProcessEngines.getDefaultProcessEngine();System.out.println(processEngine);
}

ProcessEngines.getDefaultProcessEngine()方法读取的是activiti.cfg.xml,且bean的id必须是processEngineConfiguration。
使用ProcessEngineConfiguration创建:

ProcessEngineConfiguration processEngineConfiguration =ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml");
ProcessEngine processEngine = processEngineConfiguration.buildProcessEngine();
System.out.println(processEngine);

2.3 数据库说明

Activiti的后台是有数据库的支持,所有的表都以ACT_开头。 第二部分是表示表的用途的两个字母标识。用途也和服务的API对应。
ACT_RE_: 'RE’表示repository。 这个前缀的表包含了流程定义和流程静态资源 (图片,规则,等等)。
ACT_RU_
: RU’表示runtime。 这些运行时的表,包含流程实例,任务,变量,异步任务,等运行中的数据。
Activiti只在流程实例执行过程中保存这些数据, 在流程结束时就会删除这些记录。 这样运行时表可以一直很小速度很快。
ACT_ID_:'ID’表示identity。 这些表包含身份信息,比如用户,组等等。
ACT_HI_
: 'HI’表示history。这些表包含历史数据,比如历史流程实例, 变量,任务等等。
ACT_GE_*: 通用数据, 用于不同场景下,如存放资源文件。 资源库流程规则表

  1. act_re_deployment 部署信息表
  2. act_re_model 流程设计模型部署表
  3. act_re_procdef 流程定义数据表
  4. act_re_event_subscr 事件监听

运行时数据库表

  1. act_ru_execution 运行时流程执行实例表
  2. act_ru_identitylink运行时流程人员表,主要存储任务节点与参与者的相关信息
  3. act_ru_task 运行时任务节点表
  4. act_ru_variable运行时流程变量数据表
  5. act_ru_job 异步作业

历史数据库表
1) act_hi_actinst 历史节点表
2)act_hi_attachment 历史附件表
3) act_hi_comment 历史意见表,评论
4) act_hi_identitylink 历史流程人员表
5) act_hi_detail 历史详情表,提供历史变量的查询
6)act_hi_procinst 历史流程实例表
7) act_hi_taskinst 历史任务实例表
8) act_hi_varinst 历史变量表

组织机构表 1) act_id_group 用户组信息表2) act_id_info 用户扩展信息表 3) act_id_membership 用户与用户组对应信息表 4) act_id_user 用户信息表

这四张表很常见,基本的组织机构管理,关于用户认证方面建议还是自己开发一套,组件自带的功能太简单,使用中有很多需求难以满足

通用数据表
1)act_ge_bytearray 二进制数据表,所有二进制内容保存到这个表,比如bpmn文件。
2) act_ge_property属性数据表存储整个流程引擎级别的数据,初始化表结构时,会默认插入三条记录,

其它数据表

  1. act_evt_log 事件日志,默认不开启
  2. act_procdef_info 流程定义的动态变更信息

2.4 Activiti对象说明

a) 几个和流程相关的对象
Deployment:部署对象,和部署表(act_re_deployment)对应
ProcessDefinition:流程定义对象,和流程定义表(act_re_procdef)对应
ProcessInstance:流程实例对象,和流程实例表(act_ru_execution)对应
Task:任务对象,和任务表(act_ru_task)对应

b) 几个Service对象
RepositoryService:操作部署、流程定义等静态资源信息
RuntimeService:操作流程实例,启动流程实例、查询流程实例、删除流程实例等动态信息
TaskService:操作任务,查询任务、办理任务等和任务相关的信息 HistoryService:操作历史信息的,查询历史信息
IdentityService:操作用户和组

c) 几个Query对象
DeploymentQuery:对应查询部署表(act_re_deployment)
ProcessDefinitionQuery:对应查询流程定义表(act_re_procdef)
ProcessInstanceQuery:对应查询流程实例表(act_ru_execution)
TaskQuery:对应查询任务表(act_ru_task)

bpmn通过RepositoryService部署,引擎会把bpmn解析成可执行的东西,生成一个Deployment(部署),对应的生成流程定义(ProcessDefinition)。
通过RuntimeService启动流程定义,得到一个流程实例。同时会生Task(任务),任务是绑定到用户的,记录当前操作者是谁,任务状态是什么,用TaskService操作任务。

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...
【Ctfer训练计划】——(三... 作者名:Demo不是emo  主页面链接:主页传送门 创作初心ÿ...