环境
  JDK1.7
  MySQL5.6
  Tomcat7
  Eclipse-Luna
  activiti 6.0

一、概念
1、工作流(Workflow):是一系列相互衔接、自动进行的业务活动或任务。采用工作流软件,使用者只需在电脑上填写有关表单,会按照定义好的流程自动往下跑,下一级审批者将会收到相关资料,并可以根据需要修改、跟踪、管理、查询、统计、打印等,大大提高了效率。
2、BPMN即业务流程建模与标注(Business Process Model and Notation,BPMN) ,描述流程的基本符号,包括这些图元如何组合成一个业务流程图(Business Process Diagram)。
BPMN是BPM及workflow的建模语言标准之一。


3、Activiti是一个开源的工作流引擎,它实现了BPMN 2.0规范,可以发布设计好的流程定义,并通过api进行流程调度。

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

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


二、官网示例
1、activiti-admin.war 用于管理web服务(登录用户/密码:admin / admin,URL:http://localhost:8080/activiti-admin)

2、activiti-app.war 用于测试示例web服务(登录用户/密码:admin / test,URL:http://localhost:8080/activiti-app)

3、activiti-rest.war Activiti提供的一组可以直接操作工作流引擎的REST API接口服务(登录用户/密码:kermit/kermit,URL:http://localhost:8080/activiti-rest/docs/#/)

三、开发环境搭建

1、安装eclipse安装activiti插件

插件地址:http://download.eclipse.org/modeling/emf/updates/releases/

安装成功示意图:

配置 创建流程后要保存流程设计图

2、这里使用传统单体应用为例,可以使用maven,后面文章会有介绍。
创建java工程,将从官网下载的activiti-6.0.0.zip中libs目录下的jar全部拷贝到工程中,并加载进去。

四、编写第一个Activiti程序:请假流程
1、设计流程文件
使用*.bpmn或者*.bpmn20.xml

2、配置流程引擎
引入下面文件:activiti.cfg.xml,实质就是一个spring配置文件.

读取默认配置文件:activiti.cfg.xml
ProcessEngineConfiguration config = ProcessEngineConfiguration.createProcessEngineConfigurationFromResourceDefault();
读取指定配置文件
ProcessEngineConfiguration config = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("my-activiti1.xml");
读取指定配置文件和配置bean
ProcessEngineConfiguration config = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("my-activiti2.xml", "test");

<?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.xsd">
<!-- 流程引擎配置的bean -->
<bean id="processEngineConfiguration"
class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/act" />
<property name="jdbcDriver" value="com.mysql.jdbc.Driver" />
<property name="jdbcUsername" value="root" />
<property name="jdbcPassword" value="123456" />
<property name="databaseSchemaUpdate" value="true" />
<property name="history" value="activity" />
<property name="mailServerHost" value="smtp.163.com"></property>
<property name="mailServerPort" value="25"></property>
<property name="mailServerDefaultFrom" value="yangenxiong@163.com"></property>
<property name="mailServerUsername" value="yangenxiong@163.com"></property>
<property name="mailServerPassword" value="123456"></property>
</bean>
</beans>

(1)定义了一个数据库连接,这里我们使用mysql,注意要提前引入mysql jdbc依赖包,mysql里创建数据库:act,activiti可以支持的关系型数据库:MySQL、Oracle、PostgresSQL、DB2、MSSQL,默认使用内存数据库H2

(2)databaseSchemaUpdate 有4个值:

false:false为默认值,设置为该值后,Activiti在启动时,会对比数据库表中保存的版本,如果没有表或者版本不匹配时,将在启动时抛出异常。
true:设置为该值后,Activiti会对数据库中所有的表进行更新,如果表不存在,则Activiti会自动创建。
create-drop:Activiti启动时,会执行数据库表的创建操作,在Activiti关闭时,执行数据库表的删除操作。
drop-create:Activiti启动时,执行数据库表的删除操作在Activiti关闭时,会执行数据库表的创建操作。

(3)Activiti 提供了 history 属性对其进行配置
none:不保存任何的历史数据,因此,在流程执行过程中,这是最高效的。
activity:级别高于 none,保存流程实例与流程行为,其他数据不保存。
audit:除 activity 级别会保存的数据外,还会保存全部的流程任务及其属性。audit为 history 的默认值。
full:保存历史数据的最高级别,除了会保存 audit 级别的数据外,还会保存其他全部流程相关的细节数据,包括一些流程参数等。

(4)Activiti 支持邮件服务,当流程执行到某一个节点时,Activiti会根据流程文件配置(EmailTask),发送邮件到相应的邮箱。
mailServerHost:邮件服务器地址,非必填,默认值为 localhost。
mailServerPort:SMTP 发送邮件服务器端口,默认值为 25。
mailServerDefaultFrom: 非必填, 发送人的邮箱地址, 默认值为 activiti@activiti.org。
mailServerUsername:邮箱登录用户名。
mailServerPassword:邮箱登录密码。
mailServerUseSSL:是否使用 SSL 协议通信,默认为 false。
mailServerUseTLS:是否使用 TLS 协议通信,默认为 false。

编写java:

package com.wjy.act;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task; public class FirstAct { public static void main(String[] args) { ProcessEngine engine = ProcessEngines.getDefaultProcessEngine(); //关闭引擎
engine.close();
System.exit(0);
}
}

执行完成之后,看一下数据库act里创建了28张表.

3、请假流程示例
完整代码:

package com.wjy.act;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task; public class FirstAct { public static void main(String[] args) { ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
// 存储服务
RepositoryService rs = engine.getRepositoryService();
// 运行时服务
RuntimeService runService = engine.getRuntimeService();
// 任务服务
TaskService taskService = engine.getTaskService();
//加载流程文件 一次可以部署多个流程
rs.createDeployment().addClasspathResource("vacation.bpmn").deploy();
//启动流程 流程实例
ProcessInstance pi = runService.startProcessInstanceByKey("myProcess"); // 普通员工完成请假的任务
Task task = taskService.createTaskQuery().processInstanceId(pi.getId()).singleResult();
System.out.println("当前流程节点:" + task.getName());
taskService.complete(task.getId()); // 经理审核任务
task = taskService.createTaskQuery().processInstanceId(pi.getId()).singleResult();
System.out.println("当前流程节点:" + task.getName());
taskService.complete(task.getId()); task = taskService.createTaskQuery().processInstanceId(pi.getId()).singleResult();
System.out.println("流程结束后:" + task);
//关闭引擎
engine.close();
System.exit(0);
}
}

执行日志:

03:26:47,741 [main] INFO  org.activiti.engine.ProcessEngines  - Initializing process engine using configuration 'file:/E:/workspace/sparkws/first-act/bin/activiti.cfg.xml'
03:26:47,743 [main] INFO org.activiti.engine.ProcessEngines - initializing process engine for resource file:/E:/workspace/sparkws/first-act/bin/activiti.cfg.xml
03:26:48,223 [main] INFO org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl - Found 1 auto-discoverable Process Engine Configurators
03:26:48,224 [main] INFO org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl - Found 1 Process Engine Configurators in total:
03:26:48,224 [main] INFO org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl - class org.activiti.management.jmx.JMXConfigurator (priority:10000)
03:26:48,224 [main] INFO org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl - Executing beforeInit() of class org.activiti.management.jmx.JMXConfigurator (priority:10000)
03:26:49,773 [main] INFO org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl - Found compatibility handler instance : class org.activiti.compatibility.DefaultActiviti5CompatibilityHandler
03:26:49,773 [main] INFO org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl - Executing configure() of class org.activiti.management.jmx.JMXConfigurator (priority:10000)
03:26:49,959 [main] INFO org.activiti.engine.impl.db.DbSqlSession - performing create on engine with resource org/activiti/db/create/activiti.mysql.create.engine.sql
03:26:49,960 [main] INFO org.activiti.engine.impl.db.DbSqlSession - Found MySQL: majorVersion=5 minorVersion=6
03:26:49,979 [jmxConnectorStarterThread] INFO org.activiti.management.jmx.DefaultManagementAgent - JMX Connector thread started and listening at: service:jmx:rmi:///jndi/rmi://PC-20190528ODKR:1099/jmxrmi/activiti
03:27:14,557 [main] INFO org.activiti.engine.impl.db.DbSqlSession - performing create on history with resource org/activiti/db/create/activiti.mysql.create.history.sql
03:27:14,558 [main] INFO org.activiti.engine.impl.db.DbSqlSession - Found MySQL: majorVersion=5 minorVersion=6
03:27:18,765 [main] INFO org.activiti.engine.impl.db.DbSqlSession - performing create on identity with resource org/activiti/db/create/activiti.mysql.create.identity.sql
03:27:18,765 [main] INFO org.activiti.engine.impl.db.DbSqlSession - Found MySQL: majorVersion=5 minorVersion=6
03:27:20,539 [main] INFO org.activiti.engine.impl.ProcessEngineImpl - ProcessEngine default created
03:27:20,603 [main] INFO org.activiti.engine.ProcessEngines - initialised process engine default
当前流程节点:write vacation
当前流程节点:Audit
流程结束后:null

表act_ge_bytearray会存储部署的流程:

参考:
基于BPMN2.0的工作流(Workflow
BPMN2.0规范
Activiti6简明教程
Activiti官方用户手册
相关软件下载

【Activiti学习之一】Activiti入门的更多相关文章

  1. activiti学习资料(架构描述)

    Activiti学习资料 Activiti是业界很流行的java工作流引擎,关于Activiti与JBPM5的关系和如何选择不是本文要讨论的话题,相关内容可以baidu一下.Activiti从架构角度 ...

  2. Activiti 学习笔记记录(2016-8-31)

    上一篇:Activiti 学习笔记记录(二) 导读:上一篇学习了bpmn 画图的常用图形标记.那如何用它们组成一个可用文件呢? 我们知道 bpmn 其实是一个xml 文件

  3. Activiti 学习笔记记录(二)

    上一篇:Activiti 学习笔记记录 导读:对于工作流引擎的使用,我们都知道,需要一个业务事件,比如请假,它会去走一个流程(提交申请->领导审批---(批,不批)---->结束),Act ...

  4. Activiti 学习笔记记录

    官方在线用户手册(英文版):http://activiti.org/userguide/index.html 中文用户手册:http://www.mossle.com/docs/activiti/in ...

  5. Activiti学习——Activiti与Spring集成

    转: Activiti学习——Activiti与Spring集成 与Spring集成 基础准备 目录结构 相关jar包 Activiti的相关jar包 Activiti依赖的相关jar包 Spring ...

  6. Activiti学习之 多实例实现会签功

    转: Activiti学习之 多实例实现会签功能 2014年11月26日 11:27:11 程诺 阅读数:26185   版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog ...

  7. activiti学习-用户与用户组

    activiti学习笔记3-用户与用户组 2015年05月07日 14:43:06 cq1982 阅读数:4142更多 个人分类: activiti工作流引擎   (本博客都是纯文本手工代码,错误难免 ...

  8. activiti学习笔记

    activiti入门 activiti官网 pom.xml文件 xml <!-- activiti --> <dependency> <groupId>org.ac ...

  9. 【Activiti学习之八】Spring整合Activiti

    环境 JDK 1.8 MySQL 5.6 Tomcat 8 idea activiti 5.22 activiti-explorer是官方提供的一个演示项目,可以使用页面管理Activiti流程.ac ...

随机推荐

  1. WPF 精修篇 属性动画

    原文:WPF 精修篇 属性动画 属性动画 是通过 Storyboard 来改变属性值 <Rectangle x:Name="rect" Width="200&quo ...

  2. 安卓访问https错误,访问http可以,可能是nginx ssl证书配置有问题

    开发中遇到react-native生成的android访问UAT和开发环境的http api都可以,但是访问生产环境的https就报错,还有就是第三方webhook调用你https网站的api也可能会 ...

  3. Redis配置过程中的问题

    记录一下配置过程中的坑~~ 当Redis在服务器上安装完成后,get.set没有问题了,接下来在程序中使用看看... 首先 在配置文件redis.conf中,默认的bind 接口是127.0.0.1, ...

  4. python 多进程并发demo

    outline 下午需要简单处理一份数据,就直接随手写脚本处理了,但发现效率太低,速度太慢,就改成多进程了: 程序涉及计算.文件读写,鉴于计算内容挺多的,就用多进程了(计算密集). 代码 import ...

  5. codeforces467-A水题

    题目链接:http://codeforces.com/problemset/problem/467/A A. George and Accommodation time limit per test ...

  6. Vue项目运行或打包时,频繁内存溢出情况CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory

    前端使用基于vue的Nuxt框架,但是随着项目功能增多,项目变大,频繁出现此种情况,原因是项目太大,导致内存溢出,排除代码问题外,可参照以下方式解决 解决方案 1.全局安装increase-memor ...

  7. 开发工具--PyCharm

    工具|PyCharm 主要介绍关于PyCharm的使用小技巧,方便自己使用这款软件. 前戏准备 1.下载pycharm: 官方网站(鼠标单击) 2.安装(自己百度一下,教程很多) 正式开始 PyCha ...

  8. linux 忘记mysql用户root密码 解决方案

    1.vim /etc/my.cnf[mysqld]skip-grant-tables ##追加此行,跳过权限表, 2.重启mysqlsystemctl restart mysqld 3.mysql 登 ...

  9. WEB图片水印实现

    很多大公司内网都有页面不可见水印,一旦图片截图发送给外部后,可以根据图片不可见水印进行溯源,查出发送人的信息. 原图:(就是下面白色的图片) PS 打开这个图片,在这个图片上新建图层,填充黑色,混合模 ...

  10. kubernetes学习控制器之StatefulSet控制器

    StatefulSet介绍 一.StatefulSet概述 StatefulSet是用来管理stateful(有状态)应用的StatefulSet管理Pod时,确保Pod有一个按序增长的ID与Depl ...