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支持以下几种数据库
本次以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;
如果是通过脚本方式,将以下四个脚本依次执行即可
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
<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>
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>
public class DBCreate { public static void main(String[] cmd) { DbSchemaCreate.main(cmd); } }
如果执行成功,将会有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_* ACT_RU_* ACT_ID_* ACT_HI_* ACT_GE_*
现在,我们创建好了所有的表,可以替换掉上一章节中部署的三个应用的数据库,下面介绍如何替换默认的数据库。
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是通过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/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类似,就需要读者自行研究。