Spring Boot中使用activiti的方法教程(一)

前言

Activiti API是一个工作流程(workflow)和业务流程管理(BPM)系统,可以定义流程、执行流程并以不同方式对其实现运行。使用API​​的开发可以在任何IDE中完成,但是要使用Activiti Designer需要Eclipse,IDEA中使用actiBPM插件。

定义流程有几种方式:

1. 使用BPMN 2.0标准在定义一个流程XML。

2. 使用StartEvent,EndEvent,UserTask,SequenceFlow等Java类。

如果我们想要运行进程或访问任何服务,需要首先创建ProcessEngineConfiguration。也就是说,ProcessEngineConfiguration是使用Activiti API的起始之点,使用这个类也可获得流程引擎,然后就可以执行工作流和BPMN操作了。

Maven依赖:

<dependency>
 <groupId>org.activiti</groupId>
 <artifactId>activiti-spring-boot-starter-basic</artifactId>
 <version>6.0.0</version>
</dependency>

<dependency>
 <groupId>org.activiti</groupId>
 <artifactId>activiti-spring-boot-starter-security</artifactId>
 <version>6.0.0</version>
</dependency>

首先,我们需要配置ProcessEngineConfiguration连接到数据库,常使用XML文件activiti.cfg.xml进行配置:

<bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneInMemProcessEngineConfiguration">

 <property name="jdbcUrl" value="jdbc:h2:mem:activiti;DB_CLOSE_DELAY=1000" />
 <property name="jdbcDriver" value="org.h2.Driver" />
 <property name="jdbcUsername" value="root" />
 <property name="jdbcPassword" value="" />

 <property name="databaseSchemaUpdate" value="true" />
</bean>

我们可以得到使用ProcessEngines类获得流程引擎了:

ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

调用这条语句将寻找类路径中activiti.cfg.xml文件,并根据文件中的配置构造ProcessEngine。

比如我们可以在测试类中写入下面代码来获得流程引擎:

ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
assertNotNull(processEngine);
assertEquals("root", processEngine.getProcessEngineConfiguration().getJdbcUsername());

以上我们通过ProcessEngineConfiguration这个配置入口获得了流程引擎ProcessEngine,ProcessEngine是我们与Activiti的API打交道的主要方式,通过ProcessEngine,我们可以访问各种提供工作流/ BPMN功能的服务,该流程引擎和所有的服务对象都是线程安全的。

该ProcessEngines类将扫描的activiti.cfg.xml和Activiti-context.xml文件。对于activiti-context.xml文件,将以Spring方式创建 - 将创建Spring Application Context并从中获取ProcessEngine。在执行流程期间,将按BPMN文件中定义的顺序访问所有步骤。

为了更进一步了解流程概念,我们先了解一下Activiti中的流程概念和术语:

(1) 一个ProcessDefinition代表的业务流程。它用于定义流程中不同步骤的结构和行为。

(2) 部署流程定义意味着将流程定义加载到Activiti数据库中。

(3) 流程定义主要由BPMN 2.0标准定义,也可以使用Java代码定义它们,定义的所有术语也可用作Java类。

(4) 一旦我们开始运行流程定义,就可以称为一个流程process。

(5) processInstance是ProcessDefinition一个执行实例。

(6) 一个StartEvent与每一个业务流程有关,它表示该流程的切入点,同样,有一个EndEvent表示流程的结束。我们可以定义这些事件的条件。

(7) 开始和结束之间的所有步骤(或元素)称为任务,任务可以是各种类型的。最常用的任务是UserTasks和ServiceTasks。

顾名思义,UserTasks需要由用户手动执行,另一方面,ServiceTasks配置了一段代码,每当执行到达这段代码时,代码将被执行。

SequenceFlows用来连接任务,我们可以通过它将源元素和目标元素连接起来定义一个SequenceFlows;同样,我们还可以在SequenceFlow上定义条件,这样能在流程中创建条件路径。

下图是一个请教BPM的定义配置文件,配置元素在上面都有阐述,看图可产生更直观的印象:

该流程定义属于一个ProcessDefinition,起始于startEvent,结束于endEvent,中间步骤是userTask或serviceTask,其中也有SequenceFlows进行元素连接。

有了流程定义,我们可以使用Activiti提供的服务功能进行流程运行,Activiti提供的服务有:

  • RepositoryService帮助我们实现流程定义的部署。此服务会处理与流程定义相关的静态数据。
  • RuntimeService管理 ProcessInstances(当前正在运行的进程)以及进程变量
  • TaskService会跟踪 UserTasks,需要由用户手动执行的任务是Activiti API的核心。我们可以使用此服务创建任务,声明并完成任务,分配任务的受让人等。
  • FormService是一项可选服务,它用于定义中开始表单和任务表单。
  • IdentityService管理用户和组
  • HistoryService会跟踪Activiti Engine的历史记录。我们还可以设置不同的历史级别。
  • ManagementService与元数据相关,在创建应用程序时通常不需要
  • DynamicBpmnService帮助我们在不重新部署的情况下更改流程中的任何内容

Activiti的流程基础知识已经准备完成,下面我们以请教为流程说明它的使用:感兴趣的朋友们:点击这里

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

(0)

相关推荐

  • Android实现Activities之间进行数据传递的方法

    本文实例讲述了Android实现Activities之间进行数据传递的方法.分享给大家供大家参考.具体分析如下: 首先,先说明一下Activity的启动及关闭: 1. startActivity(Intent intent);  启动Activity        finish();  结束当前Activity 2. startActivityForResult(Intent intent, int requestCode);  以指定的请求码requestCode启动Activity fini

  • 解决Springboot2.1.x配置Activiti7单独数据源问题

    1|1简介 最近基于最新的Activiti7配置了SpringBoot2. 简单上手使用了一番.发现市面上解决Activiti7的教程很少,采坑也比较多,在Activiti6配置数据源和Activiti7有所区别,基于Activiti6在Activiti7里是无法正常使用的.接下来让我们看下区别. 1|2问题 Activiti6多数据源配置 6的配置比较简单点. 先加入配置: # activiti 数据源 spring.datasource.activiti.driver=com.mysql.j

  • SpringBoot2整合activiti6环境搭建过程解析

    这篇文章主要介绍了SpringBoot2整合activiti6环境搭建过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 依赖 <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </d

  • Activiti流程图查看实例

    本文实例展示了Activiti流程图查看的实现方法,具体步骤如下所示: 1.测试用例查看图片代码如下: public void viewImage() throws Exception { // 创建仓库服务对对象 RepositoryService repositoryService = processEngine.getRepositoryService(); // 从仓库中找需要展示的文件 String deploymentId = "701"; List<String&g

  • Android开发之activiti节点跳转

    activiti使用的时候,通常需要跟业务紧密的结合在一起,有些业务非常的复杂,比如一个简单的采购流程:流程如下: 供应商上新商品的时候,提交商务审核,商务审核通过提交运营审核,审核失败退回供应商. 运营审核成功提交合同签订.交运营审核审核失败退回商务审核或者直接退回供应商. 合同签订审核通过结束,合同签订审核不通过返回运营审核或者退回商务审核,或者退回供应商. 上面的流程就出现了一个问题,什么问题呢? 我们来观察一下退回线的问题. 1.商务审核退回供应商上新. 2.运营审核可能退回商务审核,运

  • Spring Boot中使用Activiti的方法教程(二)

    前言 前面一节我们已经了解了Activiti的基础概念,包括流程定义的用语和它的API功能,已经如何入手Activiti,在这一节我们将结合代码具体学习使用.小图是我们需要完成的请假流程图: 正如我们在图中看到的,这是一个非常简单的流程:员工提出休假请求,提供休假天数和开始日期.请求发送给经理.他们可以批准/拒绝该请求. 如果获得批准,则会定义一个服务任务serviceTask来发送确认电子邮件.如果被拒绝,员工可以选择修改并重新发送请求,也可以不执行任何操作. 此流程的BPMN 2.0定义文件

  • spring boot activiti工作流的搭建与简单使用

    前言 最近一直研究springboot,根据工作需求,工作流需要作为一个单独的微服务工程来提供给其他服务调用,现在简单的写下工作流(使用的activiti)微服务的搭建与简单使用 jdk:1.8 数据库:mysql  5.7 IDE:eclipse springboot:1.5.8 activiti:6.0.0 1.新建空白的maven微服务架构 新建maven项目的流程不在阐述,这里添加上activiti.myslq连接的依赖,只贴主要代码 pox.xml <project xmlns="

  • Spring Boot中使用activiti的方法教程(一)

    前言 Activiti API是一个工作流程(workflow)和业务流程管理(BPM)系统,可以定义流程.执行流程并以不同方式对其实现运行.使用API​​的开发可以在任何IDE中完成,但是要使用Activiti Designer需要Eclipse,IDEA中使用actiBPM插件. 定义流程有几种方式: 1. 使用BPMN 2.0标准在定义一个流程XML. 2. 使用StartEvent,EndEvent,UserTask,SequenceFlow等Java类. 如果我们想要运行进程或访问任何

  • 在Spring Boot中使用swagger-bootstrap-ui的方法

    swagger-bootstrap-ui 是基于swagger接口api实现的一套UI,因swagger原生ui是上下结构的,在浏览接口时不是很清晰,所以, swagger-bootstrap-ui 是基于左右菜单风格的方式,适用与我们在开发后台系统左右结构这种风格类似,方便与接口浏览 GitHub: https://github.com/xiaoymin/Swagger-Bootstrap-UI 界面预览: 引入swagger 在pom.xml文件中引入swagger以及ui的jar包依赖 <

  • 详解Spring Boot中MyBatis的使用方法

    orm框架的本质是简化编程中操作数据库的编码,发展到现在基本上就剩两家了,一个是宣称可以不用写一句SQL的hibernate,一个是可以灵活调试动态sql的mybatis,两者各有特点,在企业级系统开发中可以根据需求灵活使用.发现一个有趣的现象:传统企业大都喜欢使用hibernate,互联网行业通常使用mybatis. hibernate特点就是所有的sql都用Java代码来生成,不用跳出程序去写(看)sql,有着编程的完整性,发展到最顶端就是spring data jpa这种模式了,基本上根据

  • 在Spring Boot2中使用CompletableFuture的方法教程

    前言 在Spring Boot中有一个注释@Async,可以帮助开发人员开发并发应用程序.但使用此功能非常棘手.在本博客中,我们将了解如何将此功能与CompletableFuture一起使用.我认为你已经知道关于CompletableFuture的基础,所以我不会在这里重复这个概念. 首先,您需要使用@EnableAsync来注释您的应用程序类,这个注释告诉Spring查找使用@Async注释的方法并在单独的执行程序中运行它们. @SpringBootApplication @EnableAsy

  • Spring Boot中@ConditionalOnProperty的使用方法

    前言 在Spring Boot的自动配置中经常看到@ConditionalOnProperty注解的使用,本篇文章带大家来了解一下该注解的功能.下面话不多说了,来一起看看详细的介绍吧. Spring Boot中的使用 在Spring Boot的源码中,比如涉及到Http编码的自动配置.数据源类型的自动配置等大量的使用到了@ConditionalOnProperty的注解. HttpEncodingAutoConfiguration类中部分源代码: @Configuration(proxyBean

  • Spring Boot + Kotlin整合MyBatis的方法教程

    前言 最近使用jpa比较多,再看看mybatis的xml方式写sql觉得不爽,接口定义与映射离散在不同文件中,使得阅读起来并不是特别方便. 因此使用Spring Boot去整合MyBatis,在注解里写sql 参考<我的第一个Kotlin应用> 创建项目,在build.gradle文件中引入依赖 compile "org.mybatis.spring.boot:mybatis-spring-boot-starter:$mybatis_version" compile &qu

  • 关于spring boot中几种注入方法的一些个人看法

    前言 最近在知乎上面看到一篇关于程序员面试的问题,面试官问我们一般有几种注入的方法,这几种注入的方法分别在什么时候运用比合理,当时我看到这个时候懵逼了,由于我自己也是刚刚接触springboot不久,所以就自己在平时运用的上面总结了一些知识点常用的几种springboot的注入方法,由于我是一个小萌新,所只要是能够起道注入的方法的注解我都列出来,有可能会有错,希望大家能够及时提出来我来解决: @Autowired @Resource @Component @Configuration @Qual

  • Spring boot中使用ElasticSearch的方法详解

    0.版本选择 我这里选择了5.6.x,记得如果spring-boot-starter-parent是1.x可以选择2.x版本的elasticsearch,版本要对应,不然会有莫名其妙的问题 1.安装ElasticSearch https://www.elastic.co/downloads/past-releases windows 测试的,解压就能用 解压,到bin目录,双击elasticsearch.bat 1.1安装elasticsearch-head https://github.com

  • spring boot添加新模块的方法教程

    前言 在springboot项目框架里,把一个项目两大模块,主项目main和测试项目test,而我们的测试项目根据功能又可以再分,比如可以有单元测试,集成测试,业务测试等等. 对于一个初学者来说,建立模块的方式需要我们掌握,网上的资料不多,很少讲到这个功能点,大叔在这里普及一下! springboot项目基本结构如图: 下面我们来建立一个集成测试模块intTest,有的团队愿意叫它integTest,都可以,intTest这个名字来自于gradle官方的文档上,大叔也借鉴一下(https://d

随机推荐