Activiti7工作流整合SpringBoot手把手教你如何玩转Activiti工作流

作者 : admin 本文共6877个字,预计阅读时间需要18分钟 发布时间: 共19人阅读

Activiti7工作流整合SpringBoot手把手教你如何玩转Activiti工作流

前言

由于工作原因,最近一段时间都在研究activiti7。鉴于Activiti7的资料甚少,官网上的介绍又比较复杂,通过看Activiti的论坛以及参考了Activiti之前版本的api,项目大概有了模型。目前虽小有成果,但仍有许多不足之处,在此先拿出来跟大家分享。

工作流理论

工作流是针对工作中具有固定程序的常规活动而提出的一个概念。通过将工作活动分解成定义良好的任务、角色、规则和过程来进行执行和监控,达到提高生产组织水平和工作效率的目的。工作流其主要的工作原理是按照定义好的一个工作流程,按照这个流程进行工作流程的扭转;在流转的过程中实现数据的填充和处理。使用步骤主要是定义流程图、发布流程图、与定义的业务进行工作绑定、触发流程进行操作。

Activiti7与Activiti5和6的区别

Activiti7与Activiti5和Acticiti6有了很大的改变,宏观来说,Activiti7集成了docker、microservices、kubernetes、activiti cloud、activiti cloud、cloud native、spring boot 2.0。使用方面,它与之前两个版本少了IdentityService和FormService接口。(少的FormService接口的解决方案在下面文章会给出,而少了IdentityService接口仍未找到解决方案,有知道的话可在评论给出)

配置Activiti7

完整的pom文件

<?xml version="1.0"?>
<project
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
	xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.xxx</groupId>
	<artifactId>xxxxx</artifactId>
	<version>1.0.0-SNAPSHOT</version>
	<packaging>jar</packaging>
	<name>xxxx</name>
	<url>http://maven.apache.org</url>
	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>3.8.1</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.activiti</groupId>
			<artifactId>activiti-engine</artifactId>
			<!-- <version>6.0.0</version> -->
			<version>7.1.8</version>
		</dependency>
		<!-- Activiti 在线设计 -->
		<dependency>
			<groupId>org.activiti</groupId>
			<artifactId>activiti-modeler</artifactId>
			<version>5.22.0</version>
			<exclusions>
				<exclusion>
					<artifactId>spring-beans</artifactId>
					<groupId>org.springframework</groupId>
				</exclusion>
				<exclusion>
					<artifactId>spring-context</artifactId>
					<groupId>org.springframework</groupId>
				</exclusion>
				<exclusion>
					<artifactId>spring-core</artifactId>
					<groupId>org.springframework</groupId>
				</exclusion>
				<exclusion>
					<artifactId>spring-tx</artifactId>
					<groupId>org.springframework</groupId>
				</exclusion>
				<exclusion>
					<artifactId>spring-web</artifactId>
					<groupId>org.springframework</groupId>
				</exclusion>
				<exclusion>
					<artifactId>spring-security-config</artifactId>
					<groupId>org.springframework.security</groupId>
				</exclusion>
				<exclusion>
					<artifactId>spring-security-core</artifactId>
					<groupId>org.springframework.security</groupId>
				</exclusion>
				<exclusion>
					<artifactId>spring-security-crypto</artifactId>
					<groupId>org.springframework.security</groupId>
				</exclusion>
				<exclusion>
					<artifactId>spring-security-web</artifactId>
					<groupId>org.springframework.security</groupId>
				</exclusion>
				<exclusion>
					<artifactId>spring-webmvc</artifactId>
					<groupId>org.springframework</groupId>
				</exclusion>
				<exclusion>
					<artifactId>activation</artifactId>
					<groupId>javax.activation</groupId>
				</exclusion>
				<exclusion>
					<artifactId>commons-io</artifactId>
					<groupId>commons-io</groupId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>org.apache.xmlgraphics</groupId>
			<artifactId>xmlgraphics-commons</artifactId>
			<version>2.2</version>
		</dependency>
	</dependencies>
	<build>
		<!--<resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> 
			</resource> </resources> -->

		<!-- 将resource中的文件打包进去 -->
		<plugins>
			<plugin>
				<artifactId>maven-resources-plugin</artifactId>
				<version>2.5</version>
				<executions>
					<execution>
						<id>copy-xmls</id>
						<phase>process-sources</phase>
						<goals>
							<goal>copy-resources</goal>
						</goals>
						<configuration>
							<outputDirectory>${basedir}/target/classes</outputDirectory>
							<resources>
								<resource>
									<directory>${basedir}/src/main/resource</directory>
									<includes>
										<include>**</include>
									</includes>
								</resource>
							</resources>
						</configuration>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>
	<repositories>
		<repository>
			<id>alfresco</id>
			<name>Activiti Releases</name>
			<url>https://artifacts.alfresco.com/nexus/content/repositories/activiti-releases/</url>
			<releases>
				<enabled>true</enabled>
			</releases>
		</repository>
	</repositories>
</project>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131

在这里解释一下上面的pom文件。
activiti-engine是Acticiti的核心包。
activiti-modeler是网页流程设计器的包,这里用的是5.22.0版本的(至于为什么不用Activiti7的,本人觉得Acticiti7目前没有自带的网页流程设计器,它是集成第三方的设计器,在页面设计上没有5.22.0美观)。
repositories这里引入了Acticiti的仓库,因为Maven是没有7.1.8的,它只有7-201802-EA版本。在使用期间,7-201802-EA版本出现了taskCandidateOrAssigned只要有流程,所有人都获取到该流程信息的bug,于是在这里建议使用7.1.8版本。

Activiti配置文件

package com.manong.smzypt.activiti.config;

import javax.sql.DataSource;
import org.activiti.engine.HistoryService;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngineConfiguration;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 使用Java类完成配置文件
 */
@Configuration
public class ActivitiConfig {

	@Autowired
    private DataSource dataSource;
    
    /**
     * 初始化配置,将创建28张表
     * @return
     */
    @Bean
    public StandaloneProcessEngineConfiguration processEngineConfiguration() {
        StandaloneProcessEngineConfiguration configuration = new StandaloneProcessEngineConfiguration();
        configuration.setDataSource(dataSource);
        configuration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
        configuration.setAsyncExecutorActivate(false);
        return configuration;
    }
    
    @Bean
    public ProcessEngine processEngine() {
        return processEngineConfiguration().buildProcessEngine();
    }

    @Bean
    public RepositoryService repositoryService() {
        return processEngine().getRepositoryService();
    }

    @Bean
    public RuntimeService runtimeService() {
        return processEngine().getRuntimeService();
    }

    @Bean
    public TaskService taskService() {
        return processEngine().getTaskService();
    }
    @Bean
	public HistoryService historyService() throws Exception{
		return processEngine().getHistoryService();
	}   
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60

整合5.22.0网页流程设计器

网上有很多整合的资料,在这里简单提一下。
从网上下载5.22.0的包,将包中以下内容拖到项目相对应的位置
在这里插入图片描述

Activiti7结合动态表单

在Avtiviti5和6中,有核心接口之一的FormService,结合表单可以使用:

StartFormData startFormData = formService.getStartFormData(processDefinitionId); 
List<FormProperty> formProperties = startFormData.getFormProperties();
  • 1
  • 2

但在Acticiti7中,由于没有了FormService接口,可用以下方法代替:

UserTask userTask =(UserTask)repositoryService.getBpmnModel(task.getProcessDefinitionId()).getFlowElement(task.getTaskDefinitionKey());
List<FormProperty> formProperties = userTask.getFormProperties();
  • 1
  • 2

结束语

Activiti7还有很多功能没有提及到,有兴趣的朋友可以共同交流。以后会继续更新有关工作流的博客,

Activiti7工作流整合SpringBoot手把手教你如何玩转Activiti工作流Activiti7工作流整合SpringBoot手把手教你如何玩转Activiti工作流Activiti7工作流整合SpringBoot手把手教你如何玩转Activiti工作流Activiti7工作流整合SpringBoot手把手教你如何玩转Activiti工作流Activiti7工作流整合SpringBoot手把手教你如何玩转Activiti工作流Activiti7工作流整合SpringBoot手把手教你如何玩转Activiti工作流Activiti7工作流整合SpringBoot手把手教你如何玩转Activiti工作流

滴石it网-Java学习中高级和架构师教程_Java企业级开发项目实战下载 » Activiti7工作流整合SpringBoot手把手教你如何玩转Activiti工作流

常见问题FAQ

发表回复

开通VIP 享更多特权,建议使用QQ登录