首先,个人感悟。学习新技术过程:官方文档 + 源码结构 + 架构图 + 官方例子(一般都在对应的包中)。
官方文档(各种配置说明) :http://www.mossle.com/docs/activiti/index.html
源码结构:https://www.activiti.org/javadocs/
(你完全可以根据 官方文档 + 源码画出架构图) 架构图:
官方例子:(可直接运行)
demo跟踪:(完成下面的东西,你需要引入jar包,配置activiti.cfg.xml、SLF4J 日志)
还需要作如下内容:
1,eclipse安装activiti designer插件(自己百度),安装方式:help->install new software。一路next即可。安装完成你可在new->other 输入activiti即可看到。
2,编写一个.bpmn流程文件,编写完成后,选择以XML方式打开。就可看到生成好的文件。
3,创建流程引擎,会去数据库建表(不出意外都会自动创建,不用你操心),如果没能成功你也可以利用activiti包中的sql文件插入。
测试代码:
package com.cun.activiti;
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 FirstActiviti {
/* 如果是springboot直接注入就好了。下面我们尝试用常规方式
* @Autowired RepositoryService repositoryService;
*/
public static void main(String[] args) {
// 创建流程引擎,数据创建出所需要的表
ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
// 由流程引擎得到流程存储服务组件
RepositoryService repositoryService = engine.getRepositoryService();
// 流程运行时服务组件
RuntimeService runtimeService = engine.getRuntimeService();
// 获取流程任务组件
TaskService taskService = engine.getTaskService();
// 部署流程文件(可以部署多个),部署到act_re_deployment表,对应的资源文件在act_ge_bytearray表中
repositoryService.createDeployment().addClasspathResource("processes/test_processes.bpmn").deploy();
// 启动流程,oneTaskProcess时流程文件中的唯一ID
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("oneTaskProcess");
// 实际中:个人用户和管理用户是分开写的
// 第一个审核(个人用户)。
Task task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult();
System.out.println("" + task.getName());
// 审核通过
taskService.complete(task.getId());
// 下一个任务审核(管理用户)
task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult();
System.out.println("" + task.getName());
// 审核通过
taskService.complete(task.getId());
// 接下来没有任务,就结束了 。验证结束输出为null
task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult();
System.out.println("" + task.getName());
engine.close();
System.exit(0);;
}
}
activiti.cfg.xml有一点特殊给出:
<?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 id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
<property name="jdbcUrl" value="jdbc:postgresql://localhost:5432/activiti" />
<property name="jdbcDriver" value="org.postgresql.Driver" />
<property name="jdbcUsername" value="postgres" />
<property name="jdbcPassword" value="zhouyi" />
<!-- 自动更新数据库(特殊) -->
<property name="databaseSchemaUpdate" value="true" />
</bean>
</beans>
另外引擎又分为流程引擎和规则引擎(Drools)。
流程引擎:上面已经很清楚了。
规则引擎(Drools):就是一种规则判断,了解这个之后,还得了解MVEL。MVEL是一个功能强大的基于Java应用程序的表达式语言。
更多的信息查看官方文档