美文网首页
Activiti(一)SpringBoot2集成Activiti

Activiti(一)SpringBoot2集成Activiti

作者: 为技术疯狂 | 来源:发表于2018-12-20 15:04 被阅读133次

    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目录,并在目录中创建流程文件,添加目录后,目录结构变为:

    如果没有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

    idea上activiti插件的安装及使用

    首先下载activti插件- actiBPM

    File - settings-plugins-Browse-Repositories 搜索 actiBPM   双击搜索结果或点击Install plugin安装

    IDEA Activiti Designer插件---actiBPM汉字乱码问题

    idea 安转activiti插件后,编辑流程图发现保存后中文乱码,并且idea的字符集(Settings—>Editor—>File Encodings)已经设置为UTF-8,流程图中中文仍然是乱码,如下图所示:

    2、解决此问题,需要修改idea源字符集,修改方法如下: 

    找到idea安装目录bin目录下如下图所示两个文件: 

    用编辑器打开,在文件末尾添加:

    -Dfile.encoding=UTF-8

    然后重启idea,再打开流程图就会发现中文已经可以正常显示了: 

    idea actiBPM插件生成png文件 (解决没有Diagrams或Designer选项问题)

    之前在网上看到一种解决办法:

    先将bpmn文件修改成xml文件

    然后右键点这个xml文件,在选项中选择diagrams,然后选择show Designer

    就可以看到流程图,然后Export to file保存png文件。

    我试了一下,但是在xml文件右键菜单中并没有找到Diagrams选项。

    后来找到问题所在,原来是因为有一个jbpm2.0的插件没有开启 

    开了这个插件后,果然xml右键菜单显示有Diagrams或Designer选项了 

    点开后,显示流程图,点击Export to file导出png 

    成功导出! 

    相关文章

      网友评论

          本文标题:Activiti(一)SpringBoot2集成Activiti

          本文链接:https://www.haomeiwen.com/subject/htsykqtx.html