Activity7环境搭建 IDEA Mysql
目录
建议
开发环境需要JDK8或以上,需要一个数据库保存流程定义数据,建议mysql5或以上
绘制BPMN的工具
IDEA插件市场直装
常用开发工具比如IDEA,在其中安装activity的流程定义工具actiBPM
如果是2019.1之前版本的IDEA,可以在插件市场直接搜索到
由于actiBPM不更新了,2019.1之后的IDEA无法直接搜到,需要去jetBrain的插件市场plugins.jetBrains.com搜索actiBPM插件,下载到本地后,从本地安装插件
安装好之后,就可以在文件目录右键创建BPMN文件
网站下载再本地安装
到http://plugins.jetbrains.com/,搜索需要的插件。
下载完毕,进行安装,打开IDEA,settings--->plugins
:
导入插件之后,然后重启:
准备java项目环境
maven工程
如果项目不是spring boot,那么就在IDEA创建一个标准的maven工程,在pom依赖文件中写自己业务需要的各种依赖
目录结构如下
-
依赖 太长折叠了
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.lwl</groupId> <artifactId>activitiDEMO</artifactId> <version>1.0-SNAPSHOT</version> <properties> <slf4j.version>1.6.6</slf4j.version> <log4j.version>1.2.12</log4j.version> </properties> <dependencies> <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-engine</artifactId> <version>7.0.0.Beta1</version> </dependency> <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-spring</artifactId> <version>7.0.0.Beta1</version> </dependency> <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-bpmn-model</artifactId> <version>7.0.0.Beta1</version> </dependency> <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-bpmn-converter</artifactId> <version>7.0.0.Beta1</version> </dependency> <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-json-converter</artifactId> <version>7.0.0.Beta1</version> </dependency> <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-bpmn-layout</artifactId> <version>7.0.0.Beta1</version> </dependency> <dependency> <groupId>org.activiti.cloud</groupId> <artifactId>activiti-cloud-services-api</artifactId> <version>7.0.0.Beta1</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.40</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> <!-- log start --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>${log4j.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>${slf4j.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>${slf4j.version}</version> </dependency> <!-- log end --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.5</version> </dependency> <dependency> <groupId>commons-dbcp</groupId> <artifactId>commons-dbcp</artifactId> <version>1.4</version> </dependency> </dependencies> </project>
spring boot工程
如果项目是spring boot项目,那么直接在maven就能引入各种需要的依赖,Activiti7正式版发布后,就已经支持与SpringBoot2.X版本完全整合开发了。
核心的依赖就是org.activiti:activiti-spring-boot-starter
-
依赖 太长折叠了
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>ActivitiDemo</artifactId> <groupId>com.roy</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>ActSpringBootDemo</artifactId> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.1.0.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-spring-boot-starter</artifactId> <version>${activiti.version}</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
数据库
建库
activity能使用常见的基于JDBC的数据库,默认用内存数据库h2,但我们一般使用mysql,activity会把业务流程中每一步数据都保存在数据库中
一般建议单独创建一个数据库给它使用,比如下图中localhost连接下的activity数据库,做到业务和数据分开,但也不是一定要这样
使用查询,创建一个单独的数据库
CREATE DATABASE activiti DEFAULT CHARACTER SET utf8
配置xml
非spring boot项目 配置activity.cfg.xml
activity需要依赖的业务表有25张,activity没有提供sql语句直接创建表,但是activity提供了其他工具帮我们生成所需的表
在项目的resource目录下(也就是整个Java项目打包好后的classpath目录下)创建一个xml配置文件,建议使用activity.cfg.xml
,这样后面调用xml时不需要指定别名,然后在里面写activity的配置信息
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.1.xsd">
<!--数据库连接池dbcp -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/保存activiti表的库名" />
<property name="username" value="数据库的账号" />
<property name="password" value="数据库的密码" />
</bean>
<bean id="processEngineConfiguration"
class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
<!-- 数据源 -->
<property name="dataSource" ref="dataSource" />
<!-- 数据库策略 -->
<property name="databaseSchemaUpdate" value="true"/>
</bean>
</beans>
这里面简单配置了两个bean标签
-
dataSource
配置数据库连接池dbcp,让activity能连接到指定的数据库
-
processEngineConfiguration
activity提供的核心配置类,其中的
property
:-
dataSource
说明要引用的数据源,其实就是上方配置的数据库连接池 -
databaseSchemaUpdate
可用参数如下,这个值默认为false
,第一次使用activity时可以写为true
,后面再使用时建议改回false
-
false
(默认):检查数据库表的版本和依赖库的版本, 如果版本不匹配就抛出异常。 -
true
: 构建流程引擎时,检查activity的数据库表结构是否合适, 如果表不存在就创建。 -
create-drop
: 每次启动activity时创建表,结束时删除表,这样工作流的数据就只是缓存在数据库中。 -
drop-create
:先删除表再创建表。 -
create
: 构建流程引擎时创建数据库表, 关闭流程引擎时不删除这些表。
-
-
spring boot项目
-
先在
application.yml
里配置spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/activiti?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT username: root password: root activiti: #1.flase:默认值。activiti在启动时,对比数据库表中保存的版本,如果没有表或者版本不匹配,将抛出异常 #2.true: activiti会对数据库中所有表进行更新操作。如果表不存在,则自动创建 #3.create_drop: 在activiti启动时创建表,在关闭时删除表(必须手动关闭引擎,才能删除表) #4.drop-create: 在activiti启动时删除原来的旧表,然后在创建新表(不需要手动关闭引擎) database-schema-update: true #activiti7默认不生成历史信息表,开启历史表 db-history-used: true #记录历史等级 可配置的历史级别有none, activity, audit, full #none:不保存任何的历史数据,因此,在流程执行过程中,这是最高效的。 #activity:级别高于none,保存流程实例与流程行为,其他数据不保存。 #audit:除activity级别会保存的数据外,还会保存全部的流程任务及其属性。audit为history的默认值。 #full:保存历史数据的最高级别,除了会保存audit级别的数据外,还会保存其他全部流程相关的细节数据,包括一些流程参数等。 history-level: full check-process-definitions: true
-
然后编写启动类
@SpringBootApplication public class ActApplication { public static void main(String[] args) { SpringApplication.run(ActApplication.class,args); } }
配置log4j.properties
非spring boot项目
放在项目的resource目录下(也就是整个Java项目打包好后的classpath目录下)
# Set root category priority to INFO and its only appender to CONSOLE.
#log4j.rootCategory=INFO, CONSOLE debug info warn error fatal
log4j.rootCategory=debug, CONSOLE, LOGFILE
# Set the enterprise logger category to FATAL and its only appender to CONSOLE.
log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE
# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} %-6r[%15.15t] %-5p %30.30c %x - %m\n
# LOGFILE is set to be a File appender using a PatternLayout.
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=E:\act\activiti.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%d{ISO8601} %-6r[%15.15t] %-5p %30.30c %x - %m\n
spring boot项目
直接在application.yml
里就配置好了
建表
activity基于刚才配置的xml信息,可以创建 ProcessEngineConfiguration
,再基于这个对象,创建 ProcessEngine
,创建ProcessEngine
时就会自动创建数据库。
//创建ProcessEngineConfiguration 如果配置文件名不叫activity.cfg.xml 就要手动指定配置文件名以及配置文件中bean标签的id
ProcessEngineConfiguration configuration =ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml")
//通过ProcessEngineConfiguration创建ProcessEngine,此时会创建数据库
ProcessEngine processEngine =configuration.buildProcessEngine();
执行完后,数据库中就有表了
表说明
创建出了25张核心表,这25张表支撑起了整个工作流引擎,弄清楚每张表的作用是一个难点,现在只需要了解其中几张
反过来想,要是需要用户把每张表都了解清楚,都去写对应的增删查改、DAO、service,那还要工作引擎干啥,这种操作表、管理表的事情就是工作引擎干的活
所有的表都是act
开头,第二个字段表示表的属性:
-
re:保存流程定义相关的信息
-
ru:保存流程运行时各个节点产生的信息,包括任务、变量
-
hi:保存所有的历史信息
-
ge:保存通用信息