Activity工作流(二):核心配置

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);
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/activiti?characterEncoding=utf-8"/>
    <property name="username" value="root"/>
    <property name="password" value=""/>
</bean>
<!--带数据源-->
<bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
    <property name="dataSource" ref="dataSource"/>
    <property name="databaseSchemaUpdate" value="true"/>
</bean>
<!--<property name="jdbcUrl" value="com.mysql.jdbc.Driver" />-->
<!--<property name="jdbcDriver" value="jdbc:mysql://localhost:3306/activiti?characterEncoding=utf-8" />-->
<!--<property name="jdbcUsername" value="root" />-->
<!--<property name="jdbcPassword" value="" />-->
<!--<property name="databaseSchemaUpdate" value="true"/>-->
@Test
    public 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必须是processEngineConfiguration
    ProcessEngine 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操作任务。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

专治八阿哥的孟老师

您的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值