【Activiti学习之八】Spring整合Activiti

时间:2019-10-10
本文章向大家介绍【Activiti学习之八】Spring整合Activiti,主要包括【Activiti学习之八】Spring整合Activiti使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

环境 

  JDK 1.8
  MySQL 5.6
  Tomcat 7
  idea
  activiti 5.22

activiti-explorer是官方提供的一个演示项目,可以使用页面管理Activiti流程。activiti-explorer是以war包的形式存的。这里整合Spring+Activiti Modeler。

一、资源文件准备
1、下载activiti-5.22.0.rar
官网下载比较慢,可以从这里下载:https://pan.baidu.com/s/1XVTammPbIrbzU1MK7TBFOA

2、解压activiti-5.22.0.rar


进入wars目录,解压activiti-explorer.war demo

我们需要以下文件:

(1)diagram-viewer、editor-app、modeler.html
(2)stencilset.json(原版的title、description描述都是英文,可以改成中文:传送门

二、搭建maven web工程
这里搭建传统应用:Spring + SpringMVC + Mybatis + Activiti
1、pom.xml

  1 <?xml version="1.0" encoding="UTF-8"?>
  2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4     <modelVersion>4.0.0</modelVersion>
  5     <groupId>com.wjy</groupId>
  6     <artifactId>SpringActiviti</artifactId>
  7     <version>1.0-SNAPSHOT</version>
  8     <packaging>war</packaging>
  9     <name>SpringActiviti</name>
 10     <url>http://www.wjy.com</url>
 11 
 12     <properties>
 13         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 14         <maven.compiler.source>1.7</maven.compiler.source>
 15         <maven.compiler.target>1.7</maven.compiler.target>
 16         <junit.version>4.10</junit.version>
 17         <spring.version>4.1.3.RELEASE</spring.version>
 18         <activiti.version>5.22.0</activiti.version>
 19         <jackson.version>[2.8.11.1,)</jackson.version>
 20         <activiti.version>5.22.0</activiti.version>
 21         <mysql.version>5.1.38</mysql.version>
 22         <mybatis.version>3.4.1</mybatis.version>
 23         <batik.version>1.7</batik.version>
 24         <xml-apis.version>1.3.04</xml-apis.version>
 25     </properties>
 26 
 27     <dependencies>
 28         <!-- junit start -->
 29         <dependency>
 30             <groupId>junit</groupId>
 31             <artifactId>junit</artifactId>
 32             <version>${junit.version}</version>
 33             <scope>test</scope>
 34         </dependency>
 35         <!-- junit end -->
 36 
 37         <!-- spring start -->
 38         <!--Spring框架核心库 -->
 39         <dependency>
 40             <groupId>org.springframework</groupId>
 41             <artifactId>spring-context</artifactId>
 42             <version>${spring.version}</version>
 43         </dependency>
 44         <!-- Spring MVC -->
 45         <dependency>
 46             <groupId>org.springframework</groupId>
 47             <artifactId>spring-webmvc</artifactId>
 48             <version>${spring.version}</version>
 49         </dependency>
 50         <!-- spring end -->
 51 
 52         <!--jackson start-->
 53         <dependency>
 54             <groupId>com.fasterxml.jackson.core</groupId>
 55             <artifactId>jackson-databind</artifactId>
 56             <version>${jackson.version}</version>
 57         </dependency>
 58 
 59         <dependency>
 60             <groupId>com.fasterxml.jackson.core</groupId>
 61             <artifactId>jackson-core</artifactId>
 62             <version>${jackson.version}</version>
 63         </dependency>
 64 
 65         <dependency>
 66             <groupId>com.fasterxml.jackson.core</groupId>
 67             <artifactId>jackson-annotations</artifactId>
 68             <version>${jackson.version}</version>
 69         </dependency>
 70         <!--jackson end-->
 71 
 72         <!-- myBatis start -->
 73         <!--Spring java数据库访问包,在本例中主要用于提供数据源 -->
 74         <dependency>
 75             <groupId>org.springframework</groupId>
 76             <artifactId>spring-jdbc</artifactId>
 77             <version>${spring.version}</version>
 78         </dependency>
 79         <!--mysql数据库驱动 -->
 80         <dependency>
 81             <groupId>mysql</groupId>
 82             <artifactId>mysql-connector-java</artifactId>
 83             <version>${mysql.version}</version>
 84         </dependency>
 85         <!-- mybatis ORM框架 -->
 86         <dependency>
 87             <groupId>org.mybatis</groupId>
 88             <artifactId>mybatis</artifactId>
 89             <version>${mybatis.version}</version>
 90         </dependency>
 91         <!--mybatis-spring适配器 -->
 92         <dependency>
 93             <groupId>org.mybatis</groupId>
 94             <artifactId>mybatis-spring</artifactId>
 95             <version>1.3.0</version>
 96         </dependency>
 97         <!--log4j日志包 -->
 98         <dependency>
 99             <groupId>org.apache.logging.log4j</groupId>
100             <artifactId>log4j-core</artifactId>
101             <version>2.6.1</version>
102         </dependency>
103         <!-- myBatis end -->
104 
105         <!-- activiti start -->
106         <dependency>
107             <groupId>org.activiti</groupId>
108             <artifactId>activiti-engine</artifactId>
109             <version>${activiti.version}</version>
110         </dependency>
111 
112         <dependency>
113             <groupId>org.activiti</groupId>
114             <artifactId>activiti-spring</artifactId>
115             <version>${activiti.version}</version>
116         </dependency>
117         <dependency>
118             <groupId>org.activiti</groupId>
119             <artifactId>activiti-bpmn-model</artifactId>
120             <version>${activiti.version}</version>
121         </dependency>
122         <dependency>
123             <groupId>org.activiti</groupId>
124             <artifactId>activiti-bpmn-layout</artifactId>
125             <version>${activiti.version}</version>
126         </dependency>
127         <dependency>
128             <groupId>org.activiti</groupId>
129             <artifactId>activiti-common-rest</artifactId>
130             <version>${activiti.version}</version>
131         </dependency>
132         <dependency>
133             <groupId>org.activiti</groupId>
134             <artifactId>activiti-crystalball</artifactId>
135             <version>${activiti.version}</version>
136         </dependency>
137         <dependency>
138             <groupId>org.activiti</groupId>
139             <artifactId>activiti-explorer</artifactId>
140             <version>${activiti.version}</version>
141         </dependency>
142         <dependency>
143             <groupId>org.activiti</groupId>
144             <artifactId>activiti-diagram-rest</artifactId>
145             <version>${activiti.version}</version>
146         </dependency>
147         <dependency>
148             <groupId>org.activiti</groupId>
149             <artifactId>activiti-json-converter</artifactId>
150             <version>${activiti.version}</version>
151             <exclusions>
152                 <exclusion>
153                     <artifactId>commons-collections</artifactId>
154                     <groupId>commons-collections</groupId>
155                 </exclusion>
156             </exclusions>
157         </dependency>
158         <dependency>
159             <groupId>org.activiti</groupId>
160             <artifactId>activiti-modeler</artifactId>
161             <version>${activiti.version}</version>
162         </dependency>
163         <dependency>
164             <groupId>org.activiti</groupId>
165             <artifactId>activiti-simple-workflow</artifactId>
166             <version>${activiti.version}</version>
167         </dependency>
168         <!-- servlet -->
169         <dependency>
170             <groupId>org.apache.geronimo.specs</groupId>
171             <artifactId>geronimo-servlet_3.0_spec</artifactId>
172             <version>1.0</version>
173             <scope>provided</scope>
174         </dependency>
175         <dependency>
176             <groupId>javax</groupId>
177             <artifactId>javaee-api</artifactId>
178             <version>7.0</version>
179             <scope>provided</scope>
180         </dependency>
181         <!-- Batik的包主要是用来解析html中的svg的内容 -->
182         <dependency>
183             <groupId>org.apache.xmlgraphics</groupId>
184             <artifactId>batik-transcoder</artifactId>
185             <version>${batik.version}</version>
186         </dependency>
187         <dependency>
188             <groupId>org.apache.xmlgraphics</groupId>
189             <artifactId>batik-dom</artifactId>
190             <version>${batik.version}</version>
191         </dependency>
192         <dependency>
193             <groupId>org.apache.xmlgraphics</groupId>
194             <artifactId>batik-bridge</artifactId>
195             <version>${batik.version}</version>
196         </dependency>
197         <dependency>
198             <groupId>org.apache.xmlgraphics</groupId>
199             <artifactId>batik-css</artifactId>
200             <version>${batik.version}</version>
201         </dependency>
202         <dependency>
203             <groupId>org.apache.xmlgraphics</groupId>
204             <artifactId>batik-anim</artifactId>
205             <version>${batik.version}</version>
206         </dependency>
207         <dependency>
208             <groupId>org.apache.xmlgraphics</groupId>
209             <artifactId>batik-codec</artifactId>
210             <version>${batik.version}</version>
211         </dependency>
212         <dependency>
213             <groupId>org.apache.xmlgraphics</groupId>
214             <artifactId>batik-ext</artifactId>
215             <version>${batik.version}</version>
216         </dependency>
217         <dependency>
218             <groupId>org.apache.xmlgraphics</groupId>
219             <artifactId>batik-gvt</artifactId>
220             <version>${batik.version}</version>
221         </dependency>
222         <dependency>
223             <groupId>org.apache.xmlgraphics</groupId>
224             <artifactId>batik-script</artifactId>
225             <version>${batik.version}</version>
226         </dependency>
227         <dependency>
228             <groupId>org.apache.xmlgraphics</groupId>
229             <artifactId>batik-parser</artifactId>
230             <version>${batik.version}</version>
231         </dependency>
232         <dependency>
233             <groupId>org.apache.xmlgraphics</groupId>
234             <artifactId>batik-svg-dom</artifactId>
235             <version>${batik.version}</version>
236         </dependency>
237         <dependency>
238             <groupId>org.apache.xmlgraphics</groupId>
239             <artifactId>batik-svggen</artifactId>
240             <version>${batik.version}</version>
241         </dependency>
242         <dependency>
243             <groupId>org.apache.xmlgraphics</groupId>
244             <artifactId>batik-util</artifactId>
245             <version>${batik.version}</version>
246         </dependency>
247         <dependency>
248             <groupId>org.apache.xmlgraphics</groupId>
249             <artifactId>batik-xml</artifactId>
250             <version>${batik.version}</version>
251         </dependency>
252         <dependency>
253             <groupId>org.apache.xmlgraphics</groupId>
254             <artifactId>batik-js</artifactId>
255             <version>${batik.version}</version>
256         </dependency>
257         <dependency>
258             <groupId>org.apache.xmlgraphics</groupId>
259             <artifactId>batik-awt-util</artifactId>
260             <version>${batik.version}</version>
261         </dependency>
262         <dependency>
263             <groupId>org.apache.xmlgraphics</groupId>
264             <artifactId>xmlgraphics-commons</artifactId>
265             <version>1.2</version>
266         </dependency>
267         <dependency>
268             <groupId>xml-apis</groupId>
269             <artifactId>xml-apis-ext</artifactId>
270             <version>${xml-apis.version}</version>
271         </dependency>
272         <dependency>
273             <groupId>xml-apis</groupId>
274             <artifactId>xml-apis</artifactId>
275             <version>${xml-apis.version}</version>
276         </dependency>
277         <!-- 文件上传依赖 -->
278         <dependency>
279             <groupId>commons-io</groupId>
280             <artifactId>commons-io</artifactId>
281             <version>2.4</version>
282         </dependency>
283         <dependency>
284             <groupId>commons-collections</groupId>
285             <artifactId>commons-collections</artifactId>
286             <version>3.2.1</version>
287         </dependency>
288         <dependency>
289             <groupId>commons-beanutils</groupId>
290             <artifactId>commons-beanutils</artifactId>
291             <version>1.8.0</version>
292         </dependency>
293         <dependency>
294             <groupId>commons-lang</groupId>
295             <artifactId>commons-lang</artifactId>
296             <version>2.6</version>
297         </dependency>
298         <!-- activiti end -->
299 
300         <!-- JSON解析 start -->
301         <!-- Gson 将bean转换json确保数据的正确 -->
302         <dependency>
303             <groupId>com.google.code.gson</groupId>
304             <artifactId>gson</artifactId>
305             <version>2.8.0</version>
306         </dependency>
307         <!-- FastJson将Json转换Bean -->
308         <dependency>
309             <groupId>com.alibaba</groupId>
310             <artifactId>fastjson</artifactId>
311             <version>1.2.46</version>
312         </dependency>
313         <!-- JSON解析 end -->
314 
315     </dependencies>
316 
317     <build>
318         <finalName>SpringActiviti</finalName>
319         <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
320             <plugins>
321                 <plugin>
322                     <artifactId>maven-clean-plugin</artifactId>
323                     <version>3.1.0</version>
324                 </plugin>
325                 <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
326                 <plugin>
327                     <artifactId>maven-resources-plugin</artifactId>
328                     <version>3.0.2</version>
329                 </plugin>
330                 <plugin>
331                     <artifactId>maven-compiler-plugin</artifactId>
332                     <version>3.8.0</version>
333                 </plugin>
334                 <plugin>
335                     <artifactId>maven-surefire-plugin</artifactId>
336                     <version>2.22.1</version>
337                 </plugin>
338                 <plugin>
339                     <artifactId>maven-war-plugin</artifactId>
340                     <version>3.2.2</version>
341                 </plugin>
342                 <plugin>
343                     <artifactId>maven-install-plugin</artifactId>
344                     <version>2.5.2</version>
345                 </plugin>
346                 <plugin>
347                     <artifactId>maven-deploy-plugin</artifactId>
348                     <version>2.8.2</version>
349                 </plugin>
350             </plugins>
351         </pluginManagement>
352     </build>
353 </project>
View Code

2、web.xml

 1 <!DOCTYPE web-app PUBLIC
 2         "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 3         "http://java.sun.com/dtd/web-app_2_3.dtd" >
 4 
 5 <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
 6          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 7          xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
 8     http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
 9   <display-name>SpringActiviti</display-name>
10 
11   <!-- springMVC start -->
12   <!-- 当监听器在启动Spring容器时会自动查找Web-INF/lib目录下名为applicationContext.xml配置文件,
13   当然也可以设置参数指定配置文件的具体位置,特别是有多个配置文件的情况,指定配置文件的具体位置如下: -->
14   <context-param>
15     <param-name>contextConfigLocation</param-name>
16     <param-value>classpath:spring/springContext.xml,
17       classpath:spring/spring-*.xml</param-value>
18   </context-param>
19   <servlet>
20     <servlet-name>SpringMVC</servlet-name>
21     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
22     <init-param>
23       <param-name>contextConfigLocation</param-name>
24       <param-value>classpath:spring/springContext.xml</param-value>
25     </init-param>
26     <load-on-startup>1</load-on-startup>
27   </servlet>
28   <servlet-mapping>
29     <servlet-name>SpringMVC</servlet-name>
30     <url-pattern>/</url-pattern>
31   </servlet-mapping>
32   <servlet-mapping>
33     <servlet-name>SpringMVC</servlet-name>
34     <url-pattern>/*</url-pattern>
35   </servlet-mapping>
36   <session-config>
37     <session-timeout>30</session-timeout>
38   </session-config>
39   <listener>
40     <!-- Spring容器启动监听器 -->
41     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
42   </listener>
43 
44   <!-- 配置编码方式过滤器,注意一点:要配置在所有过滤器的前面 -->
45   <filter>
46     <filter-name>CharacterEncodingFilter</filter-name>
47     <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
48     <init-param>
49       <param-name>encoding</param-name>
50       <param-value>utf-8</param-value>
51     </init-param>
52   </filter>
53   <filter-mapping>
54     <filter-name>CharacterEncodingFilter</filter-name>
55     <url-pattern>/*</url-pattern>
56   </filter-mapping>
57 
58   <!-- 配置编码过滤 -->
59   <filter>
60     <filter-name>EncoidingFilter</filter-name>
61     <filter-class>com.wjy.util.EncoidingFilter</filter-class>
62 
63     <init-param>
64       <param-name>Encoding</param-name>
65       <param-value>utf-8</param-value>
66     </init-param>
67   </filter>
68 
69   <filter-mapping>
70     <filter-name>EncoidingFilter</filter-name>
71     <url-pattern>/*</url-pattern>
72   </filter-mapping>
73   <!-- springMVC end -->
74 </web-app>
View Code

3、springContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-4.3.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd">

    <!-- 自动扫描包,实现支持注解的IOC -->
    <context:component-scan base-package="com.wjy">
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />
    </context:component-scan>
    <!-- 支持mvc注解驱动 -->
    <mvc:annotation-driven />

    <!-- 静态资源文件,不会被Spring MVC拦截 -->
    <mvc:default-servlet-handler />
    <mvc:resources location="/resources/" mapping="/resources/**" />
    <bean id="springContextHelper" class="com.wjy.util.ApplicationContextHandler"></bean>

    <!-- 视图页面配置 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix">
            <value>/WEB-INF/views/</value>
        </property>
        <property name="suffix">
            <value>.jsp</value>
        </property>
    </bean>

</beans>
View Code

4、spring-mybatis.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-4.3.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">

    <!--1 引入属性文件,在配置中占位使用,可以通过${属性名}获得属性文件中的内容 -->
    <context:property-placeholder location="classpath*:jdbc.properties" />

    <!--2 配置一个Spring提供的数据源 :jdbc数据源,创建一个驱动管理数据源的bean -->
    <bean id="jdbcDataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="${jdbc.driver}" />
        <property name="url" value="${jdbc.url}" />
        <property name="username" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />
    </bean>
    
    <!--3 会话工厂bean sqlSessionFactoryBean -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 数据源 -->
        <property name="dataSource" ref="jdbcDataSource"></property>
        <!-- 别名 -->
        <property name="typeAliasesPackage" value="com.zr.workflow.activiti.entity"></property>
        
        <!-- sql映射文件路径 -->
        <!-- 扫描mappers目录以及子目录下的所有xml文件 -->
          <property name="mapperLocations" value="classpath:mybatis/mappers/**/*.xml" />
    </bean>
    
    <!--4 自动扫描对象关系映射 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!--指定会话工厂,如果当前上下文中只定义了一个则该属性可省去 -->
        <!-- <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property> -->
        <!-- basePackage 属性是让你为映射器接口文件设置基本的包路径。 你可以使用分号或逗号 作为分隔符设置多于一个的包路径 -->
         <property name="basePackage" value="com.wjy.dao" />
    </bean>
    
    <!--5 声明式事务管理 -->
    <!--定义事物管理器,由spring管理事务 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="jdbcDataSource"></property>
    </bean>
    
    <!--支持注解驱动的事务管理,指定事务管理器 -->
    <tx:annotation-driven transaction-manager="transactionManager"/>

    <!-- 自动扫描包,实现支持注解的IOC在Junit测试Mybatis Service时放开 -->
    <!-- <context:component-scan base-package="com.wjy.activiti"></context:component-scan> -->
    
</beans>
View Code

5、spring-activiti.xml

6、jdbc.properties

#mysql jdbc
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/activitidb?useSSL=false&zeroDateTimeBehavior=round&useUnicode=yes&characterEncoding=UTF8
jdbc.username=root
jdbc.password=123456
View Code

7、log4j.properties

### set log levels ###
log4j.rootLogger = INFO , C , D , E

### console ###
log4j.appender.C = org.apache.log4j.ConsoleAppender
log4j.appender.C.Target = System.out
log4j.appender.C.layout = org.apache.log4j.PatternLayout
log4j.appender.C.layout.ConversionPattern = [springmvc_demo][%p] [%-d{yyyy-MM-dd HH:mm:ss}] %C.%M(%L) | %m%n

### log file ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = ../logs/springmvc-mybatis-demo.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = INFO
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = [springmvc_demo][%p] [%-d{yyyy-MM-dd HH:mm:ss}] %C.%M(%L) | %m%n

### exception ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File = ../logs/springmvc-mybatis-demo_error.log
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = [springmvc_demo][%p] [%-d{yyyy-MM-dd HH:mm:ss}] %C.%M(%L) | %m%n
View Code

三、整合activiti-explorer
1、将diagram-viewer、editor-app、modeler.html拷贝到src/main/webapp下
2、将stencilset.json拷贝到/src/main/resources下

代码目录结构:

参考:
activiti-explorer项目部署
https://blog.csdn.net/xhaimail/article/details/79507096
Activiti介绍与官方demo使用(activiti-explorer)
https://blog.csdn.net/qq_28582847/article/details/79898916
Spring学习之整合Activiti(一)
https://www.jianshu.com/p/6408b0f5f165
Spring学习之整合Activiti(二)
https://www.jianshu.com/p/3809132c2a12
Spring学习之整合Activiti(三)之Id生成
https://www.jianshu.com/p/fce7604350cc
工作流Activiti异常积累
https://www.jianshu.com/p/2df67a811aea

原文地址:https://www.cnblogs.com/cac2020/p/11646652.html