全网最新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企业实战教程<监听器篇>

全网最新Spring Boot2.5.1整合Activiti5.22.0企业实战教程<流程挂起与激活篇>

全网最新Spring Boot2.5.1整合Activiti5.22.0企业实战教程<指定任务委派人篇>