Activity工作流入门篇(下)

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 前段时间,公司说要做技术分享,于是每周都会安排同事进行技术方面的分享,虽然有时候大部分的人在玩手机,有些同事也在专心致志的在学习,毕竟程序员永远都是保持在学习写代码的路上,JDK都出到16了,尽管你可能现在还是在使用 JDK8 但是还是要继续学习呀。于是阿粉就准备研究一些公司目前没有用到的关系,就学习了一下 Activity 工作流的相关知识,在这里阿粉也分享给大家。

使用 IDEA 创建 Activity 项目

  1. 使用 IDEA 创建一个项目,然后再 POM 文件中加入依赖
<dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>
    <!--- Activiti依赖导入 -->
    <dependency>
        <groupId>org.activiti</groupId>
        <artifactId>activiti-spring</artifactId>
        <version>5.18.0</version>
    </dependency>
    <dependency>
        <groupId>org.activiti</groupId>
        <artifactId>activiti-engine</artifactId>
        <version>5.18.0</version>
        <exclusions>
            <exclusion>
                <artifactId>slf4j-api</artifactId>
                <groupId>org.slf4j</groupId>
            </exclusion>
            <exclusion>
                <artifactId>spring-beans</artifactId>
                <groupId>org.springframework</groupId>
            </exclusion>
            <exclusion>
                <artifactId>jackson-core-asl</artifactId>
                <groupId>org.codehaus.jackson</groupId>
            </exclusion>
            <exclusion>
                <artifactId>commons-lang3</artifactId>
                <groupId>org.apache.commons</groupId>
            </exclusion>
            <exclusion>
                <artifactId>commons-lang3</artifactId>
                <groupId>org.apache.commons</groupId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.35</version>
    </dependency>

工作流就是工作流,那是不是得有流程图,就像某些 OA 系统中,要先进行定义流程图,然后自动给你开始搞事情,我们画个流程图来试试。

  1. 在src/main/resources下面新建一个BPMN文件

流程图建立完成之后,就出现了在 IDEA 中从来没有见过的画面,

29.jpg

大家看上图的右半部分,是不是有很多的类似按钮的标志,我们来解释一下他们都是些什么。

  • StartEvent:启动事件元素,启动事件元素就是启动流程实例的,也就是发起一个流程的,是流程的起点。它可以配置的很简单,也可以很复杂。
  • EndEvent:结束事件元素,Activity工作流始于开始任务,止于结束任务
  • UserTask:用户操作的任务
  • ScriptTask: 脚本任务
  • ServiceTask:服务任务
  • MailTask: 邮件任务
  • ManualTask: 手工任务
  • ReceiveTask: 接收任务
  • BusinessRuleTask:规则任务
  • CallActivityTask:调用其他流程任务
  • SubProcess: 子流程
  • Pool: Pool池
  • Lane: Lane小巷 (注意:Lane小巷是放在Pool池里面的)
  • ParallelGateWay: 并行网关
  • ExclusiveGateWay: 排他网关
  • InclusiveGateWay: 包容网关
  • EventGateWay: 事件网关
  • BoundaryEvent: 边界事件
  • IntermediateCatchingEvent: 中间事件
  • IntermediateThrowingEvent:边界补偿事件
  • Annotation: 注释

我们先画一个简单的流程图,然后生成我们需要的表。

30.jpg

图我们换完了,接下来我们就来整个 Activity 的配置文件,然后使用配置文件去生成表。

activity.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="jdbcDriver" value="com.mysql.jdbc.Driver"></property>
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/managementactivity?useUnicode=true&amp;characterEncoding=utf8"></property>
        <property name="jdbcUsername" value="root"></property>
        <property name="jdbcPassword" value="123456"></property>
        <property name="databaseSchemaUpdate" value="true"></property>
    </bean>
</beans>

接下来我们就是用这个配置,去生成我们的数据表,

package com.activity.zhiyikeji.management;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngineConfiguration;
import org.junit.Test;
/**
 * @ClassName LeaveFlow
 * @Author
 * @Date 2021/6/11 14:06
 * @Description LeaveFlow
 */
public class LeaveFlow {
    @Test
    public void creatTable(){
        ProcessEngine processEngine = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activity.cfg.xml").buildProcessEngine();
    }
}

执行的时候,我们看一下控制台打印了什么内容,

40.jpg

然后去看看你的数据库,是不是生成成功了,看一看表的数量,一般是24,

41.jpg

从数据包中取出来的 SQL 脚本是多了一个流程定义信息表,这么看来,这个表对使用 Activity 来说意义不大,没他还是可以运行的。

我们已经创建好表之后,接下来我们就来直接进行部署我们画的流程图,然后看看数据库的表中是一些什么样子的数据。

/**
     * 部署请假流程
     */
    @Test
    public void deployLeaveFlow(){
        ProcessEngine processEngine = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activity.cfg.xml").buildProcessEngine();
        RepositoryService repositoryService = processEngine.getRepositoryService();
        DeploymentBuilder builder = repositoryService.createDeployment();
        builder.addClasspathResource("zhiyikeji.BPMN");//bpmn文件的名称
        builder.deploy();
    }

嘿,提示完成了,一次过,没出错,

14:32:50.747 [main] DEBUG org.activiti.engine.impl.interceptor.LogInterceptor - --- DeployCmd finished --------------------------------------------------------
14:32:50.747 [main] DEBUG org.activiti.engine.impl.interceptor.LogInter


42.jpg

当我看到这个的时候,我就放心了,我知道,看来,进去了,没啥问题了,那我们就来试试启动一下这个流程。

/**
     * 启动请假流程
     */
    @Test
    public void startProcess() {
        ProcessEngine processEngine = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activity.cfg.xml").buildProcessEngine();
        RuntimeService runtimeService = processEngine.getRuntimeService();
        runtimeService.startProcessInstanceByKey("leaveProcess");//流程的名称,也可以使用ByID来启动流程
    }

在我们执行完启动请假流程的时候,在 act_ru_task 运行时任务节点表中,就有了我们的一条任务,这样我们就能看到这个任务是什么


43.jpg

是不是这么看有点太基础了,这东西看起来也没有我们想象的这么高大上,那我们就找个开源项目,然后把工作流所有的东西都跑起来,然后再去一个个的分析工作流的内容。

阿粉找到了一个开源的项目,项目还是不错的,尤其是得感谢开源出来的大佬shenzhanwang ,先给大家放上图,大家有兴趣的可以下载。

44.jpg

毕竟开源不易,大家对这个有兴趣的可以下载一下看看,阿粉之后再继续给大家了解一下关于 Activity 的里面的一些画 bpmn 图的那些流程上的所有内容。

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
4月前
|
Android开发
Android Studio APP开发入门之活动Activity中启停活动页面的讲解及实战(附源码,包括Activity的启动结束、生命周期、跳转等)
Android Studio APP开发入门之活动Activity中启停活动页面的讲解及实战(附源码,包括Activity的启动结束、生命周期、跳转等)
41 0
|
6月前
|
前端开发 JavaScript Android开发
《移动互联网技术》第五章 界面开发: 掌握Activity的基本概念,Activity的堆栈管理和生命周期
《移动互联网技术》第五章 界面开发: 掌握Activity的基本概念,Activity的堆栈管理和生命周期
60 0
|
SQL Oracle Java
Activity工作流入门篇(上)
前段时间,公司说要做技术分享,于是每周都会安排同事进行技术方面的分享,虽然有时候大部分的人在玩手机,有些同事也在专心致志的在学习,毕竟程序员永远都是保持在学习写代码的路上,JDK都出到16了,尽管你可能现在还是在使用 JDK8 但是还是要继续学习呀。于是阿粉就准备研究一些公司目前没有用到的关系,就学习了一下 Activity 工作流的相关知识,在这里阿粉也分享给大家。
1327 0
Activity工作流入门篇(上)
|
存储 测试技术 持续交付
SAP 电商云 UI 持续集成里 workflow 触发条件一览
SAP 电商云 UI 持续集成里 workflow 触发条件一览
107 0
|
Android开发 存储
Android项目实战(三十七):Activity管理及BaseActivity的实现
原文:Android项目实战(三十七):Activity管理及BaseActivity的实现 Ps:7-10月 完成公司两个app项目上架。漏掉的总结 开始慢慢补上。   一、写一个Activity的管理类 1、单例模式,以栈(先进后出)的形式存储Activity对象 public cl...
1143 0

热门文章

最新文章