【青铜打铁篇】Activiti 工作流从入门到入土?

2023-12-15 08:18

本文主要是介绍【青铜打铁篇】Activiti 工作流从入门到入土?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

点击上方“好好学java”,选择“置顶”公众号

重磅资源、干货,第一时间送达

 重磅推荐 

① 纯福利 | 公众号资源大汇总,一年才一次!

② 重磅!!2018年Java全套入门到进阶学习视频及项目实战

③ 2018年java架构师学习视频教程资源

④ 源码系列!!spring源码深度解析

文章源码托管:https://github.com/OUYANGSIHAI/Activiti-learninig
欢迎 star !!!

本文由自己原创的多篇博客组成,不足之处,还请多多指正。

一、activiti介绍

Activiti5是由Alfresco软件在2010年5月17日发布的业务流程管理(BPM)框架,它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。Activiti基于Apache许可的开源BPM平台,创始人Tom Baeyens是JBoss jBPM的项目架构师,它特色是提供了eclipse插件,开发人员可以通过插件直接绘画出业务流程图。

  • 官网:

    http://www.activiti.org/

  • 下载:

    http://www.activiti.org/download.html

目前,Activiti5中的5.22版本是用的最多的一个版本,本次教程也是使用这个版本进行讲解,最新版本到了7.0版本

在开始教程之前,我们需要先明确下面的一些概念和知识,可以帮助我们更好的理解工作流的开发。

二、工作流引擎

ProcessEngine对象,这是Activiti工作的核心。负责生成流程运行时的各种实例及数据、监控和管理流程的运行。

用百度更为通俗的话来说就是:就是一辆汽车的发动机,就好比一辆汽车,外表做得再漂亮,如果发动机有问题就只是一个摆设。应用系统的弹性就好比引擎转速方面的性能,加速到100 公里需要1 个小时(业务流程发生变动需要进行半年的程序修改)还能叫好车吗?引擎动不动就熄火(程序因为逻辑的问题陷入死循环)的车还敢开吗?

三、BPMN

在Activiti工作流中用到了一个BPMN的文件,主要是用来描述业务流程的基本的符号,利用各个组件能够组成一个业务流程图,整个业务也是根据这个图来走的,其实用xml格式打开,就是一个xml文件

下面就是bpmn组件的示意图

图片.png

四、数据库

在我们进行业务流程开发的时候,是会产生很多的数据的,那么这些数据都是放在哪里呢?

是的,其实就是存放在数据库的。

在Activiti工作流的后台是有数据库的支持的,所有的表都以ACT_开头,利用这些数据库的表,就能够把整个业务流程的数据保存下来,然后利用这些数据进行不同的业务的开发。

数据库表示意图

图片.png

下面对这些表做一些基本的解释,这些可以先不看,等看完后面的教程后再回过头来看,你会发现其实很简单的

  • 资源库流程规则表

1)act_re_deployment     部署信息表
2)act_re_model          流程设计模型部署表
3)act_re_procdef          流程定义数据表

  • 运行时数据库表

1)act_ru_execution        运行时流程执行实例表
2)act_ru_identitylink        运行时流程人员表,主要存储任务节点与参与者的相关信息
3)act_ru_task            运行时任务节点表
4)act_ru_variable        运行时流程变量数据表

  • 历史数据库表

1)act_hi_actinst         历史节点表
2)act_hi_attachment        历史附件表
3)act_hi_comment        历史意见表
4)act_hi_identitylink        历史流程人员表
5)act_hi_detail            历史详情表,提供历史变量的查询
6)act_hi_procinst        历史流程实例表
7)act_hi_taskinst        历史任务实例表
8)act_hi_varinst            历史变量表

  • 组织机构表

1)act_id_group        用户组信息表
2)act_id_info            用户扩展信息表
3)act_id_membership    用户与用户组对应信息表
4)act_id_user            用户信息表

这些表用的很少,因为我们一般会自己做一个权限管理,所以不会用activiti自身所带的表。

  • 通用数据表

1)act_ge_bytearray        二进制数据表
2)act_ge_property            属性数据表存储整个流程引擎级别的数据,初始化表结构时,会默认插入三条记录。

这两张表的数据是不能够随意删除的,删除可能会出问题。

五、总结

工作流的概念就先介绍这么多了,更多的去官网查看,下一节将用一个入门的实例来对工作流进行讲解。

一、前言

在上一节中我们对activiti进行了基本的介绍activiti进行了基本的介绍,同时介绍了基本的概念。

这一节,我将用一个入门程序,介绍如何使用activiti。

二、环境准备

2.1、编译器选择

这里我们使用Idea进行工作流开发,虽然Idea对于工作流的友好度不是很好,因为会有一些小的bug,但是,Idea对于Java的开发还是非常的好的。

在用Idea开发之前,我们需要在idea中安装bpmn开发的插件。方法如下

打开设置

图片.png

选择plugins

图片.png

搜索actiBPM

图片.png

重启idea,新建文件

如果能够找到下面的创建方法,就代表成功了。

图片.png

新建后出现下面的编辑页面

图片.png

到现在,bpmn编辑插件就准备好了。

2.2、其他环境准备

  • JDK:1.8

  • 数据库:mysql5.7

  • activiti jar包:使用maven依赖

三、入门程序

3.1、新建maven项目

新建的maven项目目录如下

图片.png

3.2、添加pom依赖

这里需要的pom依赖有以下几个:junit、druid、mysql、lombok(日志)、activiti

<?xml version="1.0" encoding="UTF-8"?><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.sihai</groupId><artifactId>acitvitiDemo</artifactId><version>1.0-SNAPSHOT</version><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target></properties><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><!-- druid --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.12</version></dependency><!-- mysql --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.30</version></dependency><!-- lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.16.12</version></dependency><!-- logback --><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-core</artifactId><version>1.1.8</version></dependency><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.1.8</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.22</version></dependency><dependency><groupId>org.activiti</groupId><artifactId>activiti-engine</artifactId><version>5.22.0</version></dependency></dependencies><build><pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) --><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>1.8</source><target>1.8</target></configuration></plugin></plugins></pluginManagement></build>
</project>

3.3、日志配置文件

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds"><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern></encoder></appender><!--<appender name="permission" class="ch.qos.logback.core.rolling.RollingFileAppender">--><!--<file>${catalina.home}/logs/permission.log</file>--><!--<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">--><!--<FileNamePattern>${catalina.home}/logs/permission.%d{yyyy-MM-dd}.log.gz</FileNamePattern>--><!--</rollingPolicy>--><!--<layout class="ch.qos.logback.classic.PatternLayout">--><!--<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>--><!--</layout>--><!--</appender>--><!----><!--<logger name="xxx" level="INFO">--><!--<appender-ref ref="permission"/>--><!--</logger>--><!-- TRACE < DEBUG < INFO < WARN < ERROR --><root level="INFO"><appender-ref ref="STDOUT"/></root></configuration>

3.4、测试实例

下面是添加一个junit测试实例,通过测试生成activiti底层需要的数据库表,总共有25张,如果数据库生成了25张表结构,则说明成功!

/*** @Author ouyangsihai* @Description 生成activiti底层数据库表结构* @Date 16:24 2019/1/26* @Param* @return**/
public class Activiti_01 {/*** @return void* @Author ouyangsihai* @Description //生成数据库表结构* @Date 20:57 2018/12/5* @Param []**/@Testpublic void test_createDatabase() {// 创建流程引擎配置信息对象ProcessEngineConfiguration pec = ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();// 设置数据库的类型pec.setDatabaseType("mysql");// 设置创建数据库的方式
//        ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE(true);//如果没有数据库表就会创建数据库表,有的话就修改表结构.// ProcessEngineConfiguration.DB_SCHEMA_UPDATE_FALSE(false): 不会创建数据库表// ProcessEngineConfiguration.DB_SCHEMA_UPDATE_CREATE_DROP(create-drop): 先创建、再删除.pec.setDatabaseSchemaUpdate("true");// 设置数据库驱动pec.setJdbcDriver("com.mysql.jdbc.Driver");// 设置jdbcURLpec.setJdbcUrl("jdbc:mysql://localhost:3306/activitiTest?useUnicode=true&characterEncoding=UTF-8");// 设置用户名pec.setJdbcUsername("root");// 设置密码pec.setJdbcPassword("root");pec.setJdbcPassword("XXXX");// 构建流程引擎对象ProcessEngine pe = pec.buildProcessEngine(); // 调用访方法才会创建数据表// 调用close方法时,才会删除pe.close();}
}

3.5、运行测试实例

运行上面的测试实例后,将会生成下面的25张表结构。

日志信息

图片.png

表结构

图片.png

四、总结

通过上面是入门实例,就将activiti的环境准备好了!

一、前言

在上一节中,通过一个入门程序,把activiti的环境准备好了,这一节,将整合spring,并且部署一个最简单的bpmn流程图。

二、环境准备

这一节的内容在上一节入门程序的基础上进行环境配置,如果需要完整的配置文件,请到上一节查看。

2.1 spring配置

首先,需要添加spring的配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:tx="http://www.springframework.org/schema/tx" xmlns="http://www.springframework.org/schema/beans"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"><bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"><property name="ignoreUnresolvablePlaceholders" value="true"/><property name="locations"><list><value>classpath:settings.properties</value></list></property></bean><bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"><property name="driverClassName" value="${db.driverClassName}"/><property name="url" value="${db.url}"/><property name="username" value="${db.username}"/><property name="password" value="${db.password}"/><property name="initialSize" value="3"/><property name="minIdle" value="3"/><property name="maxActive" value="20"/><property name="maxWait" value="60000"/><property name="filters" value="stat,wall"/></bean><!-- tx --><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"/></bean><tx:annotation-driven transaction-manager="transactionManager"/><!-- druid --><bean id="stat-filter" class="com.alibaba.druid.filter.stat.StatFilter"><property name="slowSqlMillis" value="3000"/><property name="logSlowSql" value="true"/><property name="mergeSql" value="true"/></bean><bean id="wall-filter" class="com.alibaba.druid.wall.WallFilter"><property name="dbType" value="mysql"/></bean></beans>

2.2 数据库等环境配置文件

然后,添加数据库等环境配置文件

db.driverClassName=com.mysql.jdbc.Driver
db.url=jdbc:mysql://localhost:3306/activitiTest?useUnicode=true&characterEncoding=UTF-8
db.username=root
db.password=root

到目前为止,就把spring的配置环境搭建好了,接下来,我们需要加入activiti的整合环境的配置了。

2.3 spring整合activiti

这一步,我们加入spring整合activiti环境的配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"xmlns="http://www.springframework.org/schema/beans"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!-- 配置流程引擎配置信息对象 --><bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration"p:dataSource-ref="dataSource"p:transactionManager-ref="transactionManager"p:databaseSchemaUpdate="true"p:jobExecutorActivate="false"p:databaseType="mysql"p:activityFontName="宋体"p:labelFontName="黑体"p:xmlEncoding="utf-8"/><!-- 配置流程引擎 --><bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean"p:processEngineConfiguration-ref="processEngineConfiguration"/><!-- 配置六个服务Bean --><bean id="repositoryService" factory-bean="processEngine"factory-method="getRepositoryService"/><bean id="runtimeService" factory-bean="processEngine"factory-method="getRuntimeService"/><bean id="taskService" factory-bean="processEngine"factory-method="getTaskService"/><bean id="historyService" factory-bean="processEngine"factory-method="getHistoryService"/><bean id="formService" factory-bean="processEngine"factory-method="getFormService"/><bean id="identityService" factory-bean="processEngine"factory-method="getIdentityService"/></beans>

到2.3这一步,spring整合activiti的环境就配置好了,接下来,我们创建一个简单的bpmn文件,然后,做一个简单的测试,部署bpmn文件。

三、部署实例

3.1 绘制

打开idea的bpmn编辑器,绘制一个简单的bpmn文件,如下

图片.png

注意: 用idea编辑的时候,是不会和eclipse一样会自动的生成png文件的,这里有两种方式解决。

方式一

用eclipse打开编辑,会自动生成,这个简单,这里就不多说了。

方式二

bpmn后缀改为xml

图片.png

右键xml文件,找到下面的按键

图片.png

出现下面的界面

图片.png

右键,选择export to file

图片.png

生成如下

图片.png

最后将xml后缀改为bpmn

3.2 测试

通过上面的介绍,绘制了bpmn文件png图片,下面写一个测试实例,部署流程。

/*** @Author 欧阳思海* @Description 部署* @Date 16:24 2019/1/26* @Param* @return**/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:applicationContext-core.xml","classpath:applicationContext-activiti.xml"
})
@Slf4j
public class test02_spring {@Autowiredprivate ProcessEngine processEngine;@Autowiredprivate TaskService taskService;@Autowiredprivate RuntimeService runtimeService;@Autowiredprivate HistoryService historyService;/*** @return void* @Author 欧阳思海* @Description 部署流程实例* @Date 16:17 2018/12/19* @Param []**/@Testpublic void testTask() throws Exception {// 1 发布流程InputStream inputStreamBpmn = this.getClass().getResourceAsStream("/bpmn/test_01.xml");InputStream inputStreamPng = this.getClass().getResourceAsStream("/bpmn/test_01.png");processEngine.getRepositoryService().createDeployment().addInputStream("test_01.xml", inputStreamBpmn).addInputStream("test_01.png", inputStreamPng).deploy();ProcessInstance pi = processEngine.getRuntimeService()//.startProcessInstanceByKey("test_01");System.out.println("pid:" + pi.getId());}
}

注意上面的test_01是你的bpmn文件的id

3.3 测试结果

图片.png

四、总结

这一节通过整合spring,绘制简单的bpmn文件,然后成功部署了bpmn文件。下一节,将讲解activit的API

你「在看」吗?????

????点击「阅读原文」,更多精彩

这篇关于【青铜打铁篇】Activiti 工作流从入门到入土?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/495760

相关文章

Spring WebClient从入门到精通

《SpringWebClient从入门到精通》本文详解SpringWebClient非阻塞响应式特性及优势,涵盖核心API、实战应用与性能优化,对比RestTemplate,为微服务通信提供高效解决... 目录一、WebClient 概述1.1 为什么选择 WebClient?1.2 WebClient 与

Java中的xxl-job调度器线程池工作机制

《Java中的xxl-job调度器线程池工作机制》xxl-job通过快慢线程池分离短时与长时任务,动态降级超时任务至慢池,结合异步触发和资源隔离机制,提升高频调度的性能与稳定性,支撑高并发场景下的可靠... 目录⚙️ 一、调度器线程池的核心设计 二、线程池的工作流程 三、线程池配置参数与优化 四、总结:线程

Spring Boot 与微服务入门实战详细总结

《SpringBoot与微服务入门实战详细总结》本文讲解SpringBoot框架的核心特性如快速构建、自动配置、零XML与微服务架构的定义、演进及优缺点,涵盖开发环境准备和HelloWorld实战... 目录一、Spring Boot 核心概述二、微服务架构详解1. 微服务的定义与演进2. 微服务的优缺点三

从入门到精通详解LangChain加载HTML内容的全攻略

《从入门到精通详解LangChain加载HTML内容的全攻略》这篇文章主要为大家详细介绍了如何用LangChain优雅地处理HTML内容,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录引言:当大语言模型遇见html一、HTML加载器为什么需要专门的HTML加载器核心加载器对比表二

从入门到进阶讲解Python自动化Playwright实战指南

《从入门到进阶讲解Python自动化Playwright实战指南》Playwright是针对Python语言的纯自动化工具,它可以通过单个API自动执行Chromium,Firefox和WebKit... 目录Playwright 简介核心优势安装步骤观点与案例结合Playwright 核心功能从零开始学习

从入门到精通MySQL联合查询

《从入门到精通MySQL联合查询》:本文主要介绍从入门到精通MySQL联合查询,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下... 目录摘要1. 多表联合查询时mysql内部原理2. 内连接3. 外连接4. 自连接5. 子查询6. 合并查询7. 插入查询结果摘要前面我们学习了数据库设计时要满

从入门到精通C++11 <chrono> 库特性

《从入门到精通C++11<chrono>库特性》chrono库是C++11中一个非常强大和实用的库,它为时间处理提供了丰富的功能和类型安全的接口,通过本文的介绍,我们了解了chrono库的基本概念... 目录一、引言1.1 为什么需要<chrono>库1.2<chrono>库的基本概念二、时间段(Durat

解析C++11 static_assert及与Boost库的关联从入门到精通

《解析C++11static_assert及与Boost库的关联从入门到精通》static_assert是C++中强大的编译时验证工具,它能够在编译阶段拦截不符合预期的类型或值,增强代码的健壮性,通... 目录一、背景知识:传统断言方法的局限性1.1 assert宏1.2 #error指令1.3 第三方解决

SpringBoot集成LiteFlow工作流引擎的完整指南

《SpringBoot集成LiteFlow工作流引擎的完整指南》LiteFlow作为一款国产轻量级规则引擎/流程引擎,以其零学习成本、高可扩展性和极致性能成为微服务架构下的理想选择,本文将详细讲解Sp... 目录一、LiteFlow核心优势二、SpringBoot集成实战三、高级特性应用1. 异步并行执行2

从入门到精通MySQL 数据库索引(实战案例)

《从入门到精通MySQL数据库索引(实战案例)》索引是数据库的目录,提升查询速度,主要类型包括BTree、Hash、全文、空间索引,需根据场景选择,建议用于高频查询、关联字段、排序等,避免重复率高或... 目录一、索引是什么?能干嘛?核心作用:二、索引的 4 种主要类型(附通俗例子)1. BTree 索引(