可以从https://github.com/Activiti/Activiti/releases/download/activiti-6.0.0/activiti-6.0.0.zip,这个压缩包中包含了activiti需要依赖的jar(使用maven时,不需要),以及官方提供的demo(将activiti-app.war部署到tomcat,访问${host:port}/activiti-app即可,用户名为admin,密码为test;activiti-admin的用户名admin,密码admin;activiti-rest的用户名密码不知道)。
Activiti的表定义介绍:
activiti相关的表都是以act_为前缀的:
act_re_*:re代表repository。这些表包含了流程的静态信息(流程定义、流程资源等);
act_ru_*:ru代表runtime。这些表是运行时表包含了流程实例、用户任务的运行时数据。这些表中的数据量少并且执行快速;
act_id_*:id代表identity。这些表包含了身份信息,例如用户、组等;
act_hi_*:hi代表history。这些表包含历史数据(历史流程实例、变量、任务等);
act_ge_*:ge代表general。这些表用在变动的场景。
Activiti的Service介绍:
RepositoryService用于管理与操作部署与流程定义;
RuntimeService用于管理启动流程定义的实例,保存与获取流程变量;
TaskService是bpm引擎的核心,用于查询指定给用户与组的任务,创建独立于流程实例的任务,
指定任务的执行者,拾取与完成任务;
IdentityService十分简单,它管理用户与组的增删改查操作;
FormService是可选的服务,这个服务引入了开始表单和任务表单;
HistoryService提供所有引擎产生历史数据的查询功能;
ManagementService在使用activiti进行自定义的应用编程中通常是不需要的,
它用来获取数据库的表信息,同时它提供了对于工作(job)的查询和管理功能,
job在activiti中作用多样,比如定时器、延迟挂起/激活等;
DynamicBpmnService可以在不重新部署的情况下部分改变流程定义。
其他:
流程引擎会扫描activiti.cfg.xml与activiti-context.xml:对于activiti.cfg.xml文件引擎会用传统的activiti的方式构建,
对于activiti-context.xml引擎会以spring的方式(首先构建spring的容器,然后从容器中获取需要的实例)构建。
所有的服务都是无状态的,因此可以在一个集群中多个节点上运行activiti,不需要考虑具体哪个节点执行了请求。
Demo编写:
1.下载eclipse插件:使用eclipse的install new software工具,输入网址:http://activiti.org/designer/update/进行安装。若安装失败,可以参考https://blog.csdn.net/qq_33547950/article/details/54926435。
2.引入activiti依赖的jar包,pom如下:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.hurricane.learn</groupId>
<artifactId>learn-activiti</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-engine</artifactId>
<version>5.22.0</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>6.0.6</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
activiti.cfg.xml文件为:
<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:mysql://localhost:3306/activiti?useUnicode=true&characterEncoding=utf8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC" />
<property name="jdbcDriver" value="com.mysql.jdbc.Driver" />
<property name="jdbcUsername" value="root" />
<property name="jdbcPassword" value="root" />
<property name="databaseSchemaUpdate" value="true" />
<property name="asyncExecutorActivate" value="false" />
</bean>
</beans>
绘制的bpmn文件为:
完成一个流程简单的代码为:
package com.hurricane.learn.activiti;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngineConfiguration;
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;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class App {
private static final Logger LOGGER = LoggerFactory.getLogger(App.class);
private static ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
public static void main(String[] args) {
ProcessEngineConfiguration config = ProcessEngineConfiguration.createProcessEngineConfigurationFromResourceDefault();
ProcessEngine buildProcessEngine = config.buildProcessEngine();
// deploy("process1.bpmn");
startProcess("myProcess");
// findMyTask("张三");
// finishMyTask("赵四", "7503");
System.out.println(buildProcessEngine);
}
/**
* @Title: deploy
* @Description: 使用bpmn文件部署一个流程
* @param bpmnPath
*/
private static void deploy(String bpmnPath) {
RepositoryService repositoryService = processEngine.getRepositoryService();
repositoryService.createDeployment()
.addClasspathResource(bpmnPath)
.deploy();
LOGGER.info("Number of process definitions: " + repositoryService.createProcessDefinitionQuery().count());
}
// 部署id-》流程定义id-》流程实例id-》执行id-》活动id
/**
* @Title: startProcess
* @Description: 通过流程定义key启动一个流程实例
* @param processKey 流程定义key
*/
private static void startProcess(String processKey) {
Map<String, Object> variables = new HashMap<String, Object>();
variables.put("employeeName", "Kermit2");
variables.put("numberOfDays", new Integer(3));
variables.put("vacationMotivation", "I'm really tired!2");
RuntimeService runtimeService = processEngine.getRuntimeService();
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("myProcess", variables);
LOGGER.info("Number of process instances: " + runtimeService.createProcessInstanceQuery().count());
}
/**
* @Title: findMyTask
* @Description: 通过用户名获取该用户下的任务
* @param userName 用户名
*/
private static void findMyTask(String userName) {
TaskService taskService = processEngine.getTaskService();
List<Task> tasks = taskService.createTaskQuery().taskAssignee(userName).list();
for (Task task : tasks) {
LOGGER.info("Task available: " + task.getName());
}
}
/**
* @Title: finishMyTask
* @Description: 完成指定用户下的指定任务
* @param userName 用户名
* @param taskId 任务id
*/
private static void finishMyTask(String userName,String taskId){
Map<String, Object> taskVariables = new HashMap<String, Object>();
taskVariables.put("buxing", "true");
TaskService taskService = processEngine.getTaskService();
taskService.complete(taskId, taskVariables);
}
}
以上(没有具体写出流程图的绘制,以及流程图中各活动的参数设置)
参考网址:https://www.activiti.org/userguide/
其他资源:刘洋的activiti5.4的视频教程