Activiti是领先的轻量级的,以Java为中心的开源BPMN(Business Process Modeling Notation)引擎,实现了真正的流程自动化。下面介绍如何在SpringBoot环境下使用Maven集成Activiti6,来实现流程开发。

添加依赖






​<dependency>​






​ <groupId>org.activiti</groupId>​






​ <artifactId>activiti-spring-boot-starter-basic</artifactId>​






​ <version>6.0.0</version>​






​</dependency>​






​<dependency>​






​ <groupId>org.springframework.boot</groupId>​






​ <artifactId>spring-boot-starter-web</artifactId>​






​</dependency>​






​<dependency>​






​ <groupId>org.springframework.boot</groupId>​






​ <artifactId>spring-boot-starter-jdbc</artifactId>​






​</dependency>​


添加Processes目录

​SpringBoot集成activiti默认会从classpath下的processes目录下读取流程定义文件,所以需要在src/main/resources目录下添加processes目录,并在目录中创建流程文件,添加目录后,目录结构变为:​

SpringBoot2集成Activiti6_BPM

 

​如果没有processes目录,则需要修改配置spring.activiti.process-definition-location-prefix,指定流程文件存放目录。​

​Spring集成Activiti6默认支持**.bpmn20.xml和**.bpmn格式的流程定义文件,修改支持的文件格式,通过配置spring.activiti.process-definition-location-suffixes修改​

​如:​






​spring:​






​ activiti:​






​ check-process-definitions: true #自动检查、部署流程定义文件​






​ database-schema-update: true #自动更新数据库结构​






​ process-definition-location-prefix: classpath:/processes/ #流程定义文件存放目录​






​ #process-definition-location-suffixes: #流程文件格式​






​ # - **.bpmn20.xml​






​ # - **.bpmn​


​启动项目时,如果没有流程部署,就不能通过自动注入,使用RuntimeService等API,依赖注入时后报错。​

​ActivitiProperties中定义了activiti的自动配置项,其他配置请查看ActivitiProperties属性。​

添加数据源

添加数据源,项目中添加数据源,初始化数据库结构,后续保存流程数据,






​spring :​






​ #data source config​






​ datasource :​






​ driver : com.mysql.jdbc.Driver​






​ url: jdbc:mysql://192.168.105.10:3306/test_db?useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true​






​ username : root​






​ password : mysql​






​ initsize : 10​






​ maxActive : 20​






​ minIdle : 10​






​ maxWait : 120000​






​ poolPreparedStatements : false​






​ maxOpenPreparedStatements : -1​






​ validationQuery : select 1​






​ testOnborrow : true​






​ testOnReturn : true​






​ testWhileIdle : true​






​ timeBetweenEvictionRunsMillis : 120000​






​ filters : log4j,stat​


添加流程

在项目中添加流程,创建文件simple.bpmn,添加内容






​<?xml version="1.0" encoding="UTF-8" standalone="yes"?>​






​<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:tns="Examples" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" expressionLanguage="http://www.w3.org/1999/XPath" id="m1539757531057" name="" targetNamespace="Examples" typeLanguage="http://www.w3.org/2001/XMLSchema">​






​ <process id="oneTaskProcess" isClosed="false" name="The One Task Process" processType="None">​






​ <startEvent id="theStart"/>​






​ <sequenceFlow id="flow1" sourceRef="theStart" targetRef="theTask"/>​






​ <userTask activiti:assignee="${user}" activiti:exclusive="true" id="theTask" name="my task"/>​






​ <sequenceFlow id="flow2" sourceRef="theTask" targetRef="theEnd"/>​






​ <endEvent id="theEnd"/>​






​ </process>​






​</definitions>​


启动测试

编写SpringBoot启动类,启动项目,启动项目。






​@SpringBootApplication(scanBasePackages = "com.legao.server")​






​@EnableSwagger2​






​public class WorkflowServer {​












​ public static void main(String[] args) {​












​ SpringApplication.run(WorkflowServer.class, args);​






​ }​






​}​


启动时,发现启动报错,






​Caused by: java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy​












​Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'requestMappingHandlerMapping' defined in class path resource [org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$EnableWebMvcConfiguration.class]: Invocation of init method failed; nested exception is java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy​


​查看activiti-spring-boot-starter-basic-6.0.0.jar发现,org.activiti.spring.boot.SecurityAutoConfiguration编译报错,这时候将SecurityAutoConfiguration排除到SpringBoot启动之外,即@SpringBootApplication注解添加exclude = SecurityAutoConfiguration.class属性​






​@SpringBootApplication(scanBasePackages = "com.legao.server", exclude = SecurityAutoConfiguration.class)​






​@EnableSwagger2​






​public class WorkflowServer {​












​ public static void main(String[] args) {​












​ SpringApplication.run(WorkflowServer.class, args);​






​ }​






​}​


​再启动发现启动正常,这时候SpringBoot集成activiti已经启动成功,查看数据库,Activiti6运行所需的28张表也已经创建成功。​






​ACT_EVT_LOG​






​ACT_GE_BYTEARRAY​






​ACT_GE_PROPERTY​






​ACT_HI_ACTINST​






​ACT_HI_ATTACHMENT​






​ACT_HI_COMMENT​






​ACT_HI_DETAIL​






​ACT_HI_IDENTITYLINK​






​ACT_HI_PROCINST​






​ACT_HI_TASKINST​






​ACT_HI_VARINST​






​ACT_ID_GROUP​






​ACT_ID_INFO​






​ACT_ID_MEMBERSHIP​






​ACT_ID_USER​






​ACT_PROCDEF_INFO​






​ACT_RE_DEPLOYMENT​






​ACT_RE_MODEL​






​ACT_RE_PROCDEF​






​ACT_RU_DEADLETTER_JOB​






​ACT_RU_EVENT_SUBSCR​






​ACT_RU_EXECUTION​






​ACT_RU_IDENTITYLINK​






​ACT_RU_JOB​






​ACT_RU_SUSPENDED_JOB​






​ACT_RU_TASK​






​ACT_RU_TIMER_JOB​






​ACT_RU_VARIABLE​


​(完)​