「Activiti精品 悟纤出品」基于mysql初始化「图图为啥消失了」- 第325篇

关历史文章(阅读本文前,您可能需要先看下之前的系列👇

国内最全的Spring Boot系列之三

2020上半年发文汇总「值得收藏」

程序CPU占用率飙升,如何定位线程的堆栈信息?「超详细,值得收藏」看不懂还有配套视频 - 第319篇

「工作流Activiti」介绍-新手上路,注意安全 - 第320篇

「Activiti精品 悟纤出品」activiti介绍-十万个为什么 - 第321篇

「Activiti精品 悟纤出品」Activiti6 Getting Started- 稳扎稳打 - 第322篇

「Activiti精品 悟纤出品」Activiti7 Getting Started-摸石头过河 - 第323篇

「Activiti精品 悟纤出品」流程模型搭建-小试牛刀 - 第324篇

 

悟纤:师傅,师傅,不好了,不好了,你的“兔兔”不见了。

师傅:纳尼,我的可爱的兔兔哪去了?

悟纤:不是,不是你的兔兔,是你的图图,注意我的发音。

师傅:什么图图,又是什么鬼?

悟纤:图图就是你前些天搞的呀。

师傅:徒儿,你能不能一次性把事情说清楚,什么我搞的,我这几天没搞过啥。

悟纤:我们上一次不是做了一个流程图嘛,现在都不见了。

师傅:(内心小颤抖一下原来是这个图图)我说啥呐,原来你说的是这个事情呢,这个嘛,就有话说了,好了咱们今天就来说一说这个图图为啥消失了。

 

前言

       一觉醒来,发现昨天创建的流程全不见了,这时候真的是有一万只“草泥马”从脑中飘过,到底是谁偷走了我的图。

 

一、问题分析 - 基于activiti6

1.1 问题描述

我们发现,当我们重启tomtcat的时候,我们之前构建的数据都统统不见了:

(1)用户数据:张三、李四你们都去哪里了,为什么不带上我?

(2)流程图:我通宵达旦创建的流程图,为什么说走就走?

(3)表单:表单怎么也一声不响的就不见了?

       也就是我们在上一节所有操作的数据,统统都没有了。

 

1.2 问题的产生

       细心的小盆友,可能已经知道什么原因了,我们在之前安装activiti6的时候,说了一个很重要的信息:

默认用的是自带的内存数据库h2(在启动日志中可以看到:datasource driver: org.h2.Driver)。

师傅:看到划重点的部分没有哦,内库,呸呸呸,我说的是什么,内存数据库

       什么,还不知道什么是内库呐?(你今天穿木有?)

内存数据库,顾名思义就是将数据放在内存中直接操作的数据库。相对于磁盘,内存的数据读写速度要高出几个数量级,将数据保存在内存中相比从磁盘上访问能够极大地提高应用的性能。

       我们知道Tomcat关闭最后JVM的内存就会释放了,那么存放在内存中的数据也就一起被JVM回收释放掉了。当重新启动Tomcat之后,会重新分配一块内存区域。

1.3 问题解决

       既然内存数据库只能爽一时,不能爽一世,那么就搞个持久的数据库呗。对了,就是你经常用的持久化的数据库mysql。

 

二、activiti6基于mysql的脚本构建

2.1 支持的数据库

       我们打开/activiti-6.0.0/database/create,可以看到activit6支持的数据库:

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为例。

 

2.2 创建数据库

       我们先创建一个数据库:activiti6_demo:

CREATE DATABASE activiti6_demo default charset utf8 COLLATE utf8_general_ci; 

 

2.3 执行SQL脚本

通过脚本方式,将以下四个脚本依次执行即可,我这里的mysql版本是8.0.12:

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 

 

   运行成功的话,共有28个表,所有的表都以ACT_开头。第二部分是表示表的用途的两个字母标识。用途也和服务的API对应。

(1)ACT_RE_*: RE表示repository(仓库),存储流程静态资源,如流程模型文件等

(2)ACT_RU_*: RU表示runtime(运行时),存储activiti运行时产生的数据,比如实例信息,用户任务信息,job信息等,另外,当流程结束后,运行时数据将会被删除,以保证数据量尽可能少,保证性能。

(3)ACT_ID_*: ID表示identity(认证),存储认证信息,比如用户,组等。

(4)ACT_HI_*: HI表示history(历史),存储流程历史数据,比如实例信息,变量数据等。

(5)ACT_GE_*: GE表示general(通用),存储通用数据。

 

     这里就不展开说明,如若有需要后续文章在展开细说。

       还有另外一种初始化方式:DbSchemaCreate方式初始化,这种方式比较费劲,需要创建一个工程,导入jar包,执行代码,这里不介绍了。

 

三、activiti6基于mysql的数据库

       现在,我们创建好了所有的表,可以替换掉上一章节中部署的三个应用的数据库,下面介绍如何替换默认的数据库。

 

3.1 activiti-app

tomcat中,如果已经启动过一次应用,tomcat会在webapps文件夹下创建一个和war包名称相同的文件夹,并且将所有war包中的资源解压到该文件夹中,因为只需修改解压后文件夹中的内容即可。如果还未启动,可以用zip的解压软件进行修改。

       修改文件activiti-app/WEB-INF/classes/META-INF/activiti-app/activiti-app.properties文件,默认配置的是h2数据库的连接,将之修改为目标数据库(这里以mysql为例):

#默认的为h2注释或者删除
#datasource.driver=org.h2.Driver
#datasource.url=jdbc:h2:mem:activiti;DB_CLOSE_DELAY=-1

#设置为mysql数据库。

datasource.driver=com.mysql.jdbc.Driver
datasource.url=jdbc:mysql://127.0.0.1:3306/activiti6_demo?characterEncoding=UTF-8
datasource.username=root
datasource.password=root

#默认为h2的dialect注释掉.
#hibernate.dialect=org.hibernate.dialect.H2Dialect
#上面使用了mysql的driver了,这里也需要进行打开。hibernate.dialect=org.hibernate.dialect.MySQLDialect

 

说明:注释已经写的很清楚了,那些需要进行注释掉,哪些需要打开。

应用自带的驱动为 mysql-connector-java-5.1.30.jar,如果驱动版本不对,只需将该文件删除,将指定的驱动拷贝至目录WEB-INF/lib目录下即可。

由于我们这里使用的是mysql 8的版本,数据库驱动选择是:

mysql-connector-java-8.0.20.jar

 

3.2 activiti-admin

activiti-admin是通过rest接口获取数据,因为不需要配置数据库信息,只需配置rest接口的地址即可。

修改文件activiti-admin/WEB-INF/classes/META-INF/activiti-admin/activiti-admin.properties文件,找到REST endpoint config,修改如下配置:

# REST endpoint config
rest.app.name=Activiti app
rest.app.description=Activiti appRest config
rest.app.host=http://localhost
###请根据你的tomcat端口进行设置哦:

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的端口号,其余的如果没有做修改保持默认即可。

3.3 activiti-rest

       修改文件activiti-rest/WEB-INF/classes/db.properties文件:

### 默认为h2的配置
#db=h2
#jdbc.driver=org.h2.Driver
#jdbc.url=jdbc:h2:mem:activiti;DB_CLOSE_DELAY=-1
#jdbc.username=sa
#jdbc.password=

### mysql的配置db=mysql 
jdbc.driver=com.mysql.jdbc.Driver 
jdbc.url=jdbc:mysql://127.0.0.1:3306/activiti6_demo
jdbc.username=root 
jdbc.password=root

      默认情况下activit-rest是没有mysql-driver的,可以将mysql驱动拷贝至目录WEB-INF/lib目录下。

 

3.4 异常处理

       重新启动tomcat可以看到如下的信息:

datasource driver:com.mysql.jdbc.Driver

datasource url :jdbc:mysql://127.0.0.1:3306/activiti6_demo?characterEncoding=UTF-8

 

    如果一切都能很正常那就好了,现实却如此残酷。

3.4.1 Too many connections

       如果是下面的异常:

MySQLNonTransientConnectionException: Datasource rejected establishment of connection, message from server: "Too many connections"

原因:MySQL默认最大连接数是100,当超过100连接时就会出错。

解决方案一:中执行“set Global max_connections = 500”。

       解决方案二:修改MySQL配置文件,my.ini或者my.conf,将max_connections=100修改为max_connections=500,重启MySQL即可。

 

3.4.2 Unknown system variable'tx_isolation'

       如果报如下的错误:

java.sql.SQLException: Unknown system variable'tx_isolation'

 

问题是mysql-connector-java的版本太低,数据库的版本太高 因此将mysql-connector-java升级到最新版本就解决了问题。

 

3.4.2 驱动警告

       如果是下面的这个警告

Loading class `com.mysql.jdbc.Driver'. This isdeprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver isautomatically registered via the SPI and manual loading of the driver class isgenerally unnecessary.

 

    不用管它也是运行的,如果确实在意的话,那么就把properties的driver修改为:

com.mysql.cj.jdbc.Driver

3.5 测试

       如果成功启动的话,访问activiti-app就可以根据上一篇的文章进行流程的创建了。

3.5.1 用户和用户组的数据

       当创建好用户和用户组,那么可以在数据库中进行查看:

# 查看用户组信息

SELECT *from ACT_ID_GROUP;
#查看用户信息

SELECT *from ACT_ID_USER;
#组和用户关系表

SELECT *from ACT_ID_MEMBERSHIP;

 

3.5.2 流程创建

#流程设计模型部署表 - 建模的描述信息就保存在这个表里,这里会产生多条记录。

SELECT *from act_de_model;

 

3.5.3 表单创建

# 表单 - 当create form的时候,会产生一条数据。

SELECT *from ACT_FO_FORM_DEFINITION;

 

3.5.4 应用创建

# 部署对象表 - create apps 的时候会产生一条数据。

SELECT *from act_re_deployment;

 

悟纤小结

师傅:好了,这一节课也是介绍了很多的知识了,就先到这里了,师傅先去休息了,你把今天的知识总结下。

悟纤:师傅,您休息先,我来总结。

(1)数据丢失的原因:默认使用了H2内库-内存数据库。

(2)使用mysql的思路:① 创建数据库;②导入表结构信息和数据;③ 修改properties数据库连接信息文件。

 

我就是我,是颜色不一样的烟火。
我就是我,是与众不同的小苹果。

 

à悟空学院:https://t.cn/Rg3fKJD

学院中有Spring Boot相关的课程!点击「阅读原文」进行查看!

SpringBoot视频:http://t.cn/A6ZagYTi

Spring Cloud视频:http://t.cn/A6ZagxSR

SpringBoot Shiro视频:http://t.cn/A6Zag7IV

SpringBoot交流平台:https://t.cn/R3QDhU0

SpringData和JPA视频:http://t.cn/A6Zad1OH

SpringSecurity5.0视频:http://t.cn/A6ZadMBe

ShardingJDBC分库分表:http://t.cn/A6ZarrqS

分布式事务解决方案:http://t.cn/A6ZaBnIr

JVM内存模型调优实战:http://t.cn/A6wWMVqG

Spring入门到精通:https://t.cn/A6bFcDh4

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

悟纤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值