<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter-basic</artifactId>
<version>6.0.0</version>
</dependency>
初始化流程引擎
public ProcessEngine getP(){
/* *1.通过代码形式创建
* - 取得ProcessEngineConfiguration对象
* - 设置数据库连接属性
* - 设置创建表的策略 (当没有表时,自动创建表)
* - 通过ProcessEngineConfiguration对象创建 ProcessEngine 对象*/
//取得ProcessEngineConfiguration对象
ProcessEngineConfiguration engineConfiguration=ProcessEngineConfiguration.
createStandaloneProcessEngineConfiguration();
//设置数据库连接属性
engineConfiguration.setJdbcDriver("com.mysql.jdbc.Driver");
engineConfiguration.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/activie?characterEncoding=utf-8&allowMultiQueries=true&serverTimezone=Asia/Shanghai");
engineConfiguration.setJdbcUsername("root");
engineConfiguration.setJdbcPassword("123456");
// 设置创建表的策略 (当没有表时,自动创建表)
// public static final java.lang.String DB_SCHEMA_UPDATE_FALSE = "false";//不会自动创建表,没有表,则抛异常
// public static final java.lang.String DB_SCHEMA_UPDATE_CREATE_DROP = "create-drop";//先删除,再创建表
// public static final java.lang.String DB_SCHEMA_UPDATE_TRUE = "true";//假如没有表,则自动创建
engineConfiguration.setDatabaseSchemaUpdate("true");
//通过ProcessEngineConfiguration对象创建 ProcessEngine 对象
ProcessEngine processEngine = engineConfiguration.buildProcessEngine();
return processEngine;
}
一、单流程实例
1、部署后-执行流程前test4
//流程部署
@Test
public void test4() {
ProcessEngine p = getP();
p.getRepositoryService().createDeployment().addClasspathResource("processes/test5.bpmn").name("测试").deploy();
}
//部署流程查询
@Test
public void test5() {
ProcessEngine p = getP();
DeploymentQuery deploymentQuery = p.getRepositoryService().createDeploymentQuery();
List<Deployment> tpls = deploymentQuery.deploymentName("测试").list();
ProcessDefinitionQuery processDefinitionQuery = p.getRepositoryService().createProcessDefinitionQuery();
List<ProcessDefinition> list = processDefinitionQuery.deploymentId("2501").list();
}
act_re-deployment 流程部署表
act_re_procdef 流程定义表
2、执行流程后test6
//流程执行start
@Test
public void test6() {
ProcessEngine p = getP();
RuntimeService rs = p.getRuntimeService();
ProcessInstance processInstance = rs.startProcessInstanceById("test5id:2:2504");
}
//完成某个节点流程
@Test
public void test7() {
ProcessEngine p = getP();
TaskService taskService = p.getTaskService();
taskService.complete("15003");
}
act_ru_execution 执行表
act_ru_identitylink 身份链 表
act_ru_task
3、完成第一级执行流程后test8
act_ru_identitylink 身份链 表
act_ru_task
流程执行结束:ru类型表格全部清空
二、有分支的流程
所有 BPMN 2.0 任务以及 gateways 都可以有一个 默认的顺序流。 只有当没有其它顺序流被选取的情况下, 才选取该顺序流作为活动的输出顺序流。默认顺序流上的条件总是被忽略掉
执行流程后 分支之前和前面相同,执行到流程分支时:test6
需要设置自定义变量,当做if条件
三、排他网关
和有分支的一个道理,就是在分支处设定自定义变量,然后根据变量进行判断走哪一个分支
四、并行网关
并行任务:在其中一条任务,如左侧,进行到收款结束,是不能触发综合的,必须要左右两条线都结束,才会触发综合任务
五、定义和查询流程变量
//流程中之自定义变量
//初始化时定义
@Test
public void test8() {
ProcessEngine p = getP();
RuntimeService runtimeService = p.getRuntimeService();
Map<String ,Object> variables = new HashMap<>();
variables.put("原因","你猜");
variables.put("时间","一万年");
ProcessInstance id = runtimeService.startProcessInstanceByKey("id",variables);
}
//中途定义
@Test
public void test9() {
ProcessEngine p = getP();
RuntimeService runtimeService = p.getRuntimeService();
Map<String ,Object> variables = new HashMap<>();
variables.put("原因","不知道");
variables.put("地址","黑星");
runtimeService.setVariables("2501",variables);
}
//中途定义
@Test
public void test10() {
ProcessEngine p = getP();
TaskService taskService = p.getTaskService();
Map<String ,Object> variables = new HashMap<>();
variables.put("money","800");
taskService.setVariables("5005",variables);
}
//查询流程变量
@Test
public void test11() {
ProcessEngine p = getP();
RuntimeService runtimeService = p.getRuntimeService();
String reason = (String)runtimeService.getVariable("5004", "原因");
System.out.println();
}
@Test
public void test12() {
ProcessEngine p = getP();
TaskService taskService = p.getTaskService();
String reason = (String)taskService.getVariable("5007", "原因");
System.out.println();
}