Activiti兼容BPMN1.0和2.0规范,但是建议大家使用BPMN2.0来定义工作流程。之前让大家安装了BPMN设计工具,你把这个工具运行起来,然后我们绘制一个最简单的BPMN流程。
一、设计BPMN
在BPMN设计器上面参照下面的例子,拖拽生成一个工作流程。例如流程的名字叫做“demo_1”,必须设定成可执行的,否则Activiti无法运行这个BPMN文件。
上面BPMN流程中的“HelloWorld”是ServiceTask节点。也就是不需要人工干预,可以自动执行的节点。这个节点好像在左侧的工具栏里面没有,它是怎么拖拽生成的呢?你正常拖拽的Task节点都是“UserTask”,鼠标悬停在节点上方,选择扳手选项,里面就有服务节点了。
定义好BPMN文件之后,我们选择下载XML格式的文档,方便我们随时修改文件的内容。
二、修改BPMN文件内容
在IDEA项目中,新建bpmn目录,把下载的XML文件修改名字然后放进去。
打开这个XML文件,然后在里面的根标签上补上两个属性,只有这样做,我们编辑这个文件才会有语法提示。
工作流的id和name咱们都统一声明成demo_1
,后面启动工作流的时候要用到。
三、定义任务类
我们拖拽的HelloWorld属于ServiceTask,是会自动运行的,不需要人工干预。你想让这个HelloWorld节点执行什么功能,必须要声明Java类,把功能代码写到里面。
在com.example.emos.workflow.example.demo_1.task
包中创建HelloWorldTask
类。
import org.activiti.engine.delegate.DelegateExecution;
import org.activiti.engine.delegate.JavaDelegate;
public class HelloWorldTask implements JavaDelegate {
@Override
public void execute(DelegateExecution execution) {
System.out.println("HelloWorld");
}
}
任务类的execute()
函数你可以随便写,反正你想让这个任务类执行什么,你就往里面写代码。这里我写的是打印HelloWorld文字,一会看看Activiti执行该任务的时候能不能输出这句话。
接下来我们找到HelloWorld节点,把任务类和它关联在一起。
四、部署工作流
在SpringBoot项目中,Activiti会自动扫描processes目录下面的BPMN流程文件,然后部署到MySQL里面。我们创建的bpmn文件夹只是临时存放bpmn文件的,我们把编辑好的bpmn文件拷贝到processes目录,然后启动SpringBoot项目就自动部署了。
启动SpringBoot项目的时候,如果控制台输出了下面的提示信息,说明BPMN文件已经部署成功了。
五、运行工作流
在项目的test目录下创建Demo_1.java
测试类,编写Java代码运行工作流。
import org.activiti.engine.RuntimeService;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import javax.annotation.Resource;
@SpringBootTest
public class Demo_1 {
@Resource
private RuntimeService runtimeService;
@Test
void run() {
runtimeService.startProcessInstanceByKey("demo_1").getProcessInstanceId();
}
}
测试类运行成功之后,在控制台你会看到输出的HelloWorld,也就是说无需人为干预,只要Activiti执行demo_1工作流,就会自动运行服务节点和任务类。