最全的Activiti入门学习笔记

本文介绍Activiti流程引擎的基本操作,包括在IDEA中使用actiBPM插件绘制流程图,配置数据库,部署及执行流程。通过示例代码演示流程的启动、任务查询与执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前看某招聘软件上好多需要有Activiti开发经验,所以学习一下.主要先弄清楚基本操作, 在此记录一下.

画图:

首先需要导入插件actiBPM(如果IDEA搜不到的话可以去IDEA官网下载插件然后导入):
在这里插入图片描述

导入插件后就会发现在创建文件时有一个BPMNFile选项:
在这里插入图片描述

创建BPMNFile文件并取名就可以开始画图了:
在这里插入图片描述
右边就是可选择的图标,直接拖在中间即可(想吐槽一下移动的时候不显示移动后的位置,想对准需要对好几次).将两个模块连接需要点击方块中间的点然后往下拉,拉到目标方块.
在这里插入图片描述
在这里插入图片描述
画图的时候你会发现左边有表格,这个表格会存储到数据库中,这个Id后面会用到:
在这里插入图片描述

完善一下流程图:
在这里插入图片描述

画完图后将bpmn后缀改为xml,右键选择Diagrams在这里插入图片描述
此处可能会出现乱码问题,这个问题需要修改idea的配置文件:
在这里插入图片描述
在这两个文件中最后一行添加: -Dfile.encoding=UTF-8.

重启idea在再打开就正常了,点击保存,保存到自定义目录下,就会生成.xml.uml文件:
在这里插入图片描述

建表:

依赖:

<dependency>
      <groupId>org.activiti</groupId>
      <artifactId>activiti-engine</artifactId>
      <version>6.0.0</version>
    </dependency>
 <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.44</version>
    </dependency>
<dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
    </dependency>

方式1 测试类配置:

public class ActivitiTest {

    @Test
    public  void test() {
        //创建引擎配置对象
        ProcessEngineConfiguration configuration
                = ProcessEngineConfiguration.createStandaloneInMemProcessEngineConfiguration();

        //生成表数据
        configuration.setJdbcUrl("jdbc:mysql://localhost:3306/activiti");
        configuration.setJdbcDriver("com.mysql.jdbc.Driver");
        configuration.setJdbcUsername("root");
        configuration.setJdbcPassword("root");
        /**
         DB_SCHEMA_UPDATE_FALSE = "false";  建表时表格不存在报异常
         DB_SCHEMA_UPDATE_CREATE_DROP = "create-drop"; 如果存在则删除后重新创建
         DB_SCHEMA_UPDATE_TRUE = "true"; 不存在则创建 存在则使用
         */
        //设置表生成策略
        configuration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
        //执行
        ProcessEngine processEngine = configuration.buildProcessEngine();


    }
}

方式2 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" xmlns:spring="http://camel.apache.org/schema/spring"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">



    <bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneInMemProcessEngineConfiguration">
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/activiti"/>
        <property name="jdbcDriver" value="com.mysql.jdbc.Driver"/>
        <property name="jdbcUsername" value="root"/>
        <property name="jdbcPassword" value="root"/>
        <property name="databaseSchemaUpdate" value="true"/>

    </bean>
    


</beans>

然后在class中

 public void activitiTest(){
        ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
    }

执行后生成23张表:
re和ru:正在执行的流程信息相关表
hi:已经执行完毕的流程相关信息
ge: 存储资源(图片,xml等)
evt:
在这里插入图片描述

部署流程

直接上代码吧:

  @Test
    public void buildActiviti(){
        //获取流程引擎对象
        ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
        //基于流程引擎获取流程部署对象
        RepositoryService repositoryService = defaultProcessEngine.getRepositoryService();
        //通过部署对象部署流程图
        DeploymentBuilder deploy = repositoryService.createDeployment();


        //部署
        Deployment deployment = deploy.name("测试流程").addClasspathResource("11.bpmn").addClasspathResource("11.xml.uml").deploy();
        //输出信息
        System.out.println(deployment.getId());


    }

需要注意的是

  1. 几个文件必须在resources目录下
  2. 文件必须以bpmn或者bpmn20.xml结尾,否则act_re_procdef表中会没有数据.

查看数据库会发现多了一些数据:
act_re_deployment: 流程部署基本信息表
act_re_procdef: 流程部署定义表,和信息表是1v1的关系
act_ge_bytearray: 流程图信息表,记录图片,xml等信息

提交两次相同的流程信息在数据库中会生成一个流程数据.这样设定的原因是实际应用中会涉及到流程升级,例如需要添加某个流程,可以看一下数据库.

在这里插入图片描述

可以看到两条数据Version是不同的,而流程升级后再次访问时会优先选择version高的版本.

启动流程:

 @Test
    public void startActiviti(){
        //获取流程引擎对象
        ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
        RuntimeService runtimeService = defaultProcessEngine.getRuntimeService();
        ProcessInstance myProcess = runtimeService.startProcessInstanceByKey("myProcess_1");

        //打印相关信息
        System.out.println(myProcess.getId());
        System.out.println(myProcess.getProcessDefinitionId());
    }

myProcess_1这个就是画图时表格中指定的Id.
再次查看数据库:
act_ru_execution: 流程实例信息表
act_ru_task: 记录当前执行到哪个任务节点

会发现这两个表会有流程相关信息,一个流程只有一条记录,例如1个人申请请假他所在的流程在数据库中是只有一条记录的,但2人请假则是两条流程,会产生两条记录.

执行任务节点

可以先查询,获取任务相关信息

  @Test
    public void queryTask(){
        //获取流程引擎对象
        ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
        TaskService taskService = defaultProcessEngine.getTaskService();
        List<Task> list = taskService.createTaskQuery().list();

        for (Task task : list) {
            System.out.println(task.getId());
            System.out.println(task.getName());
            System.out.println(task.getAssignee());
            System.out.println(task.getProcessInstanceId());
        }
    }

获取到之后执行:

 @Test
    public void handlerTask(){
        //获取流程引擎对象
        ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
        TaskService taskService = defaultProcessEngine.getTaskService();
        taskService.complete("15002");

    }

每执行一次complete方法流程会往后走一步,直到结束会提示找不到该任务Id.

我们在act_hi_actinst表中可以看到是按照流程顺序执行的:
在这里插入图片描述

本文只是入门篇,大家也会发现代码比较冗余,重复很多,进阶版的等以后实际应用后再来更新吧,如果有帮助的话可以点个赞哦~

最后十分想吐槽actiBpm这个插件太难用了,其实我想继续学下去的,奈何跟着eclipse的教程实在是差距太大,eclipse的activiti插件是比较友好的,idea感觉没人更新…
比如拖拽箭头是这样的:
在这里插入图片描述 全是残影

再比如我在驳回时想返回startEvent 发现没法画出来,和向下的箭头重合了,根本连不上:
在这里插入图片描述

还有对于处理人的相关逻辑都不知道如何配置…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值