共计 5069 个字符,预计需要花费 13 分钟才能阅读完成。
数据库初始化
activiti 默认采用内存数据库 h2,作为本地测试是够了,但是作为测试环境,开发环境和生产环境,是远远不够的,我们需要使用更为强大和灵活的数据库,以下是 zip 包里提供的数据库创建脚本
activiti.db2.create.engine.sql
activiti.db2.create.history.sql
activiti.db2.create.identity.sql
activiti.h2.create.engine.sql
activiti.h2.create.history.sql
activiti.h2.create.identity.sql
activiti.hsql.create.engine.sql
activiti.hsql.create.history.sql
activiti.hsql.create.identity.sql
activiti.mssql.create.engine.sql
activiti.mssql.create.history.sql
activiti.mssql.create.identity.sql
activiti.mysql.create.engine.sql
activiti.mysql.create.history.sql
activiti.mysql.create.identity.sql
activiti.mysql55.create.engine.sql
activiti.mysql55.create.history.sql
activiti.oracle.create.engine.sql
activiti.oracle.create.history.sql
activiti.oracle.create.identity.sql
activiti.postgres.create.engine.sql
activiti.postgres.create.history.sql
activiti.postgres.create.identity.sql
从脚本上看,activiti 支持以下几种数据库
- db2
- h2
- hsqldb
- sql server
- mysql
- oracle
- postgres
本次以 mysql 为例。
activiti 提供两种方式进行数据库初始化,一种是通过脚本,一种是在 libs/activiti-engine-6.0.0.jar
中提供了 DbSchemaCreate 类用来创建数据库。一般开发人员无法拿到生产环境的数据库账号密码那么就需要提供脚本给 dba 执行,但如果有数据库的用户名密码,通过第二种更为方便。
不管通过哪种方式,都需要提前创建 mysql 数据库,以下就是创建数据库脚本参考(基于 mysql 8.0.15)
CREATE DATABASE activiti default charset utf8 COLLATE utf8_general_ci;
CREATE USER 'activiti'@'%' IDENTIFIED BY 'definesys';
GRANT ALL PRIVILEGES ON activiti.* TO 'activiti'@'%';
ALTER USER 'activiti'@'%' IDENTIFIED WITH mysql_native_password;
alter user 'activiti'@'%' identified by 'definesys';
FLUSH PRIVILEGES;
sql 脚本方式初始化
如果是通过脚本方式,将以下四个脚本依次执行即可
activiti.mysql.create.engine.sql
activiti.mysql.create.history.sql
activiti.mysql.create.identity.sql
如果 mysql 的版本低于 5.6.4
的话,需要执行以下几个脚本,原因是由于 5.6.4 以下的 mysql 版本不支持 timestamps 类型。
activiti.mysql55.create.engine.sql
activiti.mysql55.create.history.sql
activiti.mysql.create.identity.sql
DbSchemaCreate 方式初始化
- 创建 maven 项目,引入依赖包
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-engine</artifactId>
<version>6.0.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
- 在 src/resources 文件夹下创建
activiti.cfg.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
<property name="databaseType" value="mysql"></property>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/activiti"></property>
<property name="jdbcDriver" value="com.mysql.jdbc.Driver"></property>
<property name="jdbcUsername" value="activiti"></property>
<property name="jdbcPassword" value="definesys"></property>
</bean>
</beans>
- 创建一个包含 main 方法的 java 类
public class DBCreate {public static void main(String[] cmd) {DbSchemaCreate.main(cmd);
}
}
- 运行程序 DBCreate
如果执行成功,将会有 28 张表被创建,除了 ACT_EVT_LOG 表外,其他的都是业务表。
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
数据库表说明
所有表都是以 ACT
开头,并且两个字母表示模块。
-
ACT_RE_*
: RE 表示 repository(仓库),存储流程静态资源,如流程模型文件等 -
ACT_RU_*
: RU 表示 runtime(运行时),存储 activiti 运行时产生的数据,比如实例信息,用户任务信息,job 信息等,另外,当流程结束后,运行时数据将会被删除,以保证数据量尽可能少,保证性能。 -
ACT_ID_*
: ID 表示 identity(认证),存储认证信息,比如用户,组等。 -
ACT_HI_*
: HI 表示 history(历史),存储流程历史数据,比如实例信息,变量数据等。 -
ACT_GE_*
: GE 表示 general(通用),存储通用数据。
应用信息修改
现在,我们创建好了所有的表,可以替换掉上一章节中部署的三个应用的数据库,下面介绍如何替换默认的数据库。
activiti-app
tomcat 中,如果已经启动过一次应用,tomcat 会在 webapps 文件夹下创建一个和 war 包名称相同的文件夹,并且将所有 war 包中的资源解压到该文件夹中,因为只需修改解压后文件夹中的内容即可。如果还未启动,可以用类似 7 -zip 的解压软件进行修改。
修改文件 activiti-app/WEB-INF/classes/META-INF/activiti-app/activiti-app.properties
文件,默认配置的是 h2 数据库的连接,将之修改为目标数据库(这里以 mysql 为例)
datasource.driver=com.mysql.jdbc.Driver
datasource.url=jdbc:mysql://activitidb:3306/activiti?useUnicode=true&characterEncoding=utf8&useSSL=false
datasource.username=activiti
datasource.password=definesys
hibernate.dialect=org.hibernate.dialect.MySQLDialect
应用自带的驱动为
mysql-connector-java-5.1.30.jar
,如果驱动版本不对,只需将该文件删除,将指定的驱动拷贝至目录WEB-INF/lib
目录下即可,其他数据库驱动操作一样。
activiti-admin
activiti-admin 是通过 rest 接口获取数据,因为不需要配置数据库信息,只需配置 rest 接口的地址即可。
修改文件 activiti-admin/WEB-INF/classes/META-INF/activiti-admin/activiti-admin.properties
文件,修改如下配置
rest.app.name=Activiti app
rest.app.description=Activiti app Rest config
rest.app.host=http://localhost
rest.app.port=8080
rest.app.contextroot=activiti-app
rest.app.restroot=api
rest.app.user=admin
rest.app.password=test
rest.app.port 端口默认是 9999,需要修改为部署 activiti-app
的 tomcat 的端口号,其余的如果没有做修改保持默认即可
activiti-rest
修改文件 activiti-rest/WEB-INF/classes/db.properties
文件
db=mysql
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://activitidb:3306/activiti
jdbc.username=activiti
jdbc.password=definesys
同样,可以将驱动拷贝至目录 WEB-INF/lib
目录下
成功启动后,访问 http://localhost:8080/activiti-rest/docs/ 将打开 activiti swagger api 文档,包含所有的 rest 接口。
总结
本文主要介绍了如何使用自定义的数据库,以 mysql 为例,其他数据库操作方式跟 mysql 类似,就需要读者自行研究。