前言
年初要做一个运维自动化平台,需要用到流程引擎,本来打算项目用golang写的,但是golang的流程引擎功能太简单实在是用不来,最后还是选型java + activiti。到activiti官网一看,嘿出7.0了结果文档是刚写的还不全,我们java还是8的,7.0是匹配的java11,最终是问题太多只好放弃用activiti6.0了。
摸石头过河
虽然网上教程有不少,不过要真正跑起来着实不容易,有些内容比如参数的意义还是看5.0的手册才弄明白的。
安装
解决依赖先跑起来
搭建环境:java8 + springboot2.1.3 + activiti6.0 + mysql
pom依赖:
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter-basic</artifactId>
<version>${activiti.version}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.15</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
<version>2.1.0.RELEASE</version>
</dependency>
复制代码
配置数据库:
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/activiti?nullCatalogMeansCurrent=true&serverTimezone=Asia/Shanghai
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=root
复制代码
然后启动,恭喜你,应用没起来,会出现如下报错:
Caused by: java.io.FileNotFoundException: class path resource [org/springframework/security/config/annotation/authentication/configurers/GlobalAuthenticationConfigurerAdapter.class] cannot be opened because it does not exist:
这个原因是activiti6.0开发的时候springboot2.0还没出来以致年久失修,文件路径不对了,解决方案:
启动类前排除掉SecurityAutoConfiguration
@SpringBootApplication(exclude = SecurityAutoConfiguration.class)
再次启动,如果你碰到创建数据库表却找不到表的问题,两种解决方法:
- 手动创建表,表的路径在
activiti-engine-6.0.0.jar/org/activiti/db/create
- 数据库配置中加上
nullCatalogMeansCurrent=true
这是因为在org/activiti/engine/impl/db/DbSqlSession
中activiti使用databaseMetaData.getTables
寻找库表是否存在,而dbSqlSessionFactory
获取到的catalog
为空因为mysql使用schema
标识库名而不是catalog
,导致mysql扫描所有的库来找表,一旦其他库中有同名表activiti就以为找到了其实表并不存在。nullCatalogMeansCurrent
的意义就在于让mysql默认当前库,在mysql-connector-java 5.x
该参数默认为true,但在6.x以上默认为false。
再次启动,仍然没起来:
Caused by: java.io.FileNotFoundException: class path resource [processes/] cannot be resolved to URL because it does not exist
这是因为activiti会到resource/processes下面寻找流程文件,创建该目录。
配置画图插件
activiti提供了多种设计器来画流程图,我安装了IDEA的插件和eclipse的插件,比较了下还是eclipse的好用,所以只介绍eclipse 插件的安装过程。
- 下个eclipse
- 下载插件 Help --> Install New Software -->Add:
Names : Activiti BPMN 2.0 designer
Location : https://www.activiti.org/designer/update/
复制代码
- 下完了New一个diagram
4. 画流程图,一个标准的流程图有一个开始事件和一个结束事件,画完了保存为.bpmn文件或者.bpmn20.xml文件,并放到resource/processes目录下,一个xml示例文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" xmlns:tns="http://www.activiti.org/test" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test" id="m1551347612734" name="">
<process id="machine_expansion" name="Machine Expansion" isExecutable="true" isClosed="false" processType="None">
<startEvent id="start" name="开始"></startEvent>