全网最新Spring Boot2.5.1整合Activiti5.22.0企业实战教程<入门篇>
Posted DT辰白
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了全网最新Spring Boot2.5.1整合Activiti5.22.0企业实战教程<入门篇>相关的知识,希望对你有一定的参考价值。
文章目录
前言
工作流在我们日常的工作中用得可谓相当普及,尤其在企业内部管理系统,如考勤、财务、合同等系统中更是离不开它。后面几篇文章我们就来了解并且学会如何在企业开发中使用,网上很多教程都比较散,所以小编准备了四篇文章,分别是入门篇,基础篇,进阶篇,实战篇,只要你掌握了,在公司开发用到Activiti完全不是问题,因为大多数企业在Activiti5中的5.22版本是用的最多的一个版本,本次教程也是使用这个版本进行讲解,最新版本到了7.0版本,后面我们也会去了解7.0版本的一些变化和使用。
一、开发准备
由于Activiti5是由Alfresco软件在2010年5月17日发布的业务流程管理(BPM)框架,所以我们的流程图需要一个工具来绘制,actiBPM,但是最新版本IDEA2020.3不兼容 ,无法安装,可以借助其他插件,这里小编赖得找,就安装了STS(Spring Tools 4 for Eclipse)开发工具,专门来操作Activiti5,关于STS安装,小编不再赘述,网上一大堆。
1、安装STS
2、安装actiBPM插件
二、开发步骤
1、引入pom.xml依赖
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.1</version>
<relativePath/>
</parent>
<groupId>com.dt</groupId>
<artifactId>stsboot</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>stsboot</name>
<description>Activiti审批流程</description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<activiti.version>5.22.0</activiti.version>
</properties>
<dependencies>
<!-- Spring Web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Spring 单元测试 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- mysql 驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!-- 阿里 druid 数据源 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.5</version>
</dependency>
<!-- mybatis 启动器 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<!-- Activiti 启动器 -->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter-basic</artifactId>
<version>${activiti.version}</version>
</dependency>
<!-- Activiti 流程图 -->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-diagram-rest</artifactId>
<version>${activiti.version}</version>
</dependency>
<!-- Activiti 在线设计 -->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-modeler</artifactId>
<version>${activiti.version}</version>
</dependency>
<!-- 日志适配包 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</dependency>
<!-- yml,properties 提示依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2、配置application.yml
server:
port: 8081
spring:
datasource:
# 使用阿里巴巴的 druid 数据源
url: jdbc:mysql://127.0.0.1:3306/dtactiviti?useUnicode=true&characterEncoding=utf-8
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
# Activiti 配置
activiti:
#1.flase:默认值。activiti在启动时,对比数据库表中保存的版本,如果没有表或者版本不匹配,将抛出异常
#2.true: activiti会对数据库中所有表进行更新操作。如果表不存在,则自动创建
#3.create_drop: 在activiti启动时创建表,在关闭时删除表(必须手动关闭引擎,才能删除表)
#4.drop-create: 在activiti启动时删除原来的旧表,然后在创建新表(不需要手动关闭引擎)
database-schema-update: true
#记录历史等级 可配置的历史级别有none, activity, audit, full
#none:不保存任何的历史数据,因此,在流程执行过程中,这是最高效的。
#activity:级别高于none,保存流程实例与流程行为,其他数据不保存。
#audit:除activity级别会保存的数据外,还会保存全部的流程任务及其属性。audit为history的默认值。
#full:保存历史数据的最高级别,除了会保存audit级别的数据外,还会保存其他全部流程相关的细节数据,包括一些流程参数等。
history-level: full
#校验流程文件,默认校验resources下的processes文件夹里的流程文件
check-process-definitions: false
#MyBatis 配置
mybatis:
mapper-locations: classpath:mappers/*Mapper.xml
type-aliases-package: com.example.demo.pojo
configuration:
map-underscore-to-camel-case: true
3、启动主程序
@SpringBootApplication
public class StsbootApplication {
public static void main(String[] args) {
SpringApplication.run(StsbootApplication.class, args);
}
}
4、启动报错
Could not find class [org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration]
因为Activiti底层采用的Security做用户授权操作,acitivi-rest中集成了spring-security,也就是需要配合Security框架来使用Activiti。
但是我们的项目并没有打算使用Security来做用户认证授权,假设我们使用的是Shiro框架,这个时候我们怎么排除Security呢?
1.1 启动类配置排除Security
@SpringBootApplication(exclude = SecurityAutoConfiguration.class)
1.2 pom.xml依赖排除Security
<!-- Activiti 流程图 -->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-diagram-rest</artifactId>
<version>${activiti.version}</version>
<exclusions>
<exclusion>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-crypto</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- Activiti 在线设计 -->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-modeler</artifactId>
<version>${activiti.version}</version>
<exclusions>
<exclusion>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-crypto</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
</exclusion>
</exclusions>
</dependency>
再启动,又报错了,报错如下:
org.apache.ibatis.exceptions.PersistenceException:
### Error querying database. Cause: java.sql.SQLSyntaxErrorException: Table 'dtactiviti.act_ge_property' doesn't exist
### The error may exist in org/activiti/db/mapping/entity/Property.xml
### The error may involve org.activiti.engine.impl.persistence.entity.PropertyEntity.selectProperty-Inline
### The error occurred while setting parameters
### SQL: select * from ACT_GE_PROPERTY where NAME_ = ?
因为mysql这里小编没有写版本号,跟随SpringBoot版本自动适配,我们使用的SpringBoot是2.51最新版的,MySQL是 8.0.25版本的,MySQL使用schema标识库名而不是类别,因此mysql会扫描所有的库来找表,如果其他库中有相同名称的表,activiti就以为找到了,本质上这个表在当前数据库中并不存在。
1.3application.yml设置MySQL连接参数
nullCatalogMeansCurrent=true
设置nullCatalogMeansCurrent=true,表示mysql默认当前数据库操作,在mysql-connector-java 5.xxx该参数默认为true,在6.xxx以上默认为false,因此需要设置nullCatalogMeansCurrent=true。
然后再次启动就好了,仔细查看控制台打印信息:
说明我们的SpringBoot与Activiti整合成功了,并且成功生成了25张表。
好了,到此我们的整合完毕了,下面我们来认识一下25张表结构,很重要,只有表结构熟悉了,之后的编码业务逻辑你才能吃透,好多初学者都是不知道这些表哪张是干嘛的,所以觉得这个东西很难学。
三、认识25张表
这里表太多,小编推荐一个官方整理好的文档地址,大家可以去这里进行查阅。
https://www.devdoc.cn/activiti-table-summary.html
总结
SpringBoot整合Activiti5.22.0,入门篇就结束了,其实也是我们的准备篇,从这篇文章就知道,我们需要掌握Activiti的东西很多,需要进下心来,慢慢品尝,下一篇我们准备基础篇,包括了流程的部署、定义、任务等业务操作。
以上是关于全网最新Spring Boot2.5.1整合Activiti5.22.0企业实战教程<入门篇>的主要内容,如果未能解决你的问题,请参考以下文章
全网最新Spring Boot2.5.1整合Activiti5.22.0企业实战教程<入门篇>
全网最新Spring Boot2.5.1整合Activiti5.22.0企业实战教程<流程挂起与激活篇>
全网最新Spring Boot2.5.1整合Activiti5.22.0企业实战教程<监听器篇>
全网最新Spring Boot2.5.1整合Activiti5.22.0企业实战教程<监听器篇>