IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> flowable初始化表报错的问题 -> 正文阅读

[大数据]flowable初始化表报错的问题

flowable初始化表的时候一直报一下错误

mismatch: library version is '6.6.0.0', db version is 5.99.0.0 Hint: Set <property name="databaseSchemaUpdate" to value="true" or value="create-drop" (use create-drop for testing only!) in bean processEngineConfiguration in flowable.cfg.xml for

数据库是MySQL
flowable.cfg.xml配置的databaseSchemaUpdate是create,而且配置的数据库是空库,但是一直报这个错误
通过跟代码查找原因发现是没有在数据库连接上配置nullCatalogMeansCurrent=true,这个属性的作用是能保证flowable自动建表,可以建在正确的数据库中,因为flowable在创建表的时候会先去数据库的information_schema.TABLES中查找字段为TABLE_NAME是否有ACT_ID_PROPERTY的表,如果有就会查询ACT_ID_PROPERTY的版本号(因为flowable有自动更新表结构的功能)
nullCatalogMeansCurrent=true查询information_schema对应的sql如下

SELECT
	TABLE_SCHEMA AS TABLE_CAT,
	NULL AS TABLE_SCHEM,
	TABLE_NAME,
CASE
	
	WHEN TABLE_TYPE = 'BASE TABLE' THEN
CASE
	
	WHEN TABLE_SCHEMA = 'mysql' 
	OR TABLE_SCHEMA = 'performance_schema' THEN
	'SYSTEM TABLE' ELSE 'TABLE' 
END 
WHEN TABLE_TYPE = 'TEMPORARY' THEN
'LOCAL_TEMPORARY' ELSE TABLE_TYPE 
END AS TABLE_TYPE,
	TABLE_COMMENT AS REMARKS,
	NULL AS TYPE_CAT,
	NULL AS TYPE_SCHEM,
	NULL AS TYPE_NAME,
	NULL AS SELF_REFERENCING_COL_NAME,
	NULL AS REF_GENERATION 
FROM
	INFORMATION_SCHEMA.TABLES 
WHERE
	TABLE_SCHEMA = ? 
	AND TABLE_NAME LIKE ? 
HAVING
	TABLE_TYPE IN ( ?,?,?,?,? ) 
ORDER BY
	TABLE_TYPE,
	TABLE_SCHEMA,
TABLE_NAME

不配置nullCatalogMeansCurrent=true时,默认为false查询information_schema对应的sql如下

SELECT
	TABLE_SCHEMA AS TABLE_CAT,
	NULL AS TABLE_SCHEM,
	TABLE_NAME,
CASE
	
	WHEN TABLE_TYPE = 'BASE TABLE' THEN
CASE
	
	WHEN TABLE_SCHEMA = 'mysql' 
	OR TABLE_SCHEMA = 'performance_schema' THEN
	'SYSTEM TABLE' ELSE 'TABLE' 
END 
WHEN TABLE_TYPE = 'TEMPORARY' THEN
'LOCAL_TEMPORARY' ELSE TABLE_TYPE 
END AS TABLE_TYPE,
	TABLE_COMMENT AS REMARKS,
	NULL AS TYPE_CAT,
	NULL AS TYPE_SCHEM,
	NULL AS TYPE_NAME,
	NULL AS SELF_REFERENCING_COL_NAME,
	NULL AS REF_GENERATION 
FROM
	INFORMATION_SCHEMA.TABLES 
WHERE
	TABLE_NAME LIKE ?
HAVING
	TABLE_TYPE IN ( ?,?,?,?,? ) 
ORDER BY
	TABLE_TYPE,
	TABLE_SCHEMA,
TABLE_NAME

以上两个sql的区别就是为true的多加了一个TABLE_SCHEMA = ?的条件,通过这个条件把每个库隔离开了(因为我的本地库中建了多个flowable的数据库)
以下是拼接这个条件的源码位置
在这里插入图片描述

在这里插入图片描述
总结原因:如果是false的话,会遍历当前链接下的所有数据库进行查询(因为使用的是root用户登录)如果其他数据库,有flowable相关表的话,则判定为不缺少表。因而不会进行表更新操作。但是在实例化对象的时候,又无法查到相关数据,所以会在启动时报错。

如果数据库是orcale
application.yml配置文件里面注掉druid,pom注掉druid引用。flowable配置增加database-schema指定域(就是想要建表的数据库用户名)。启动项目,可以自动建表,但是会出错,此时不用管,表已经完全建好了,恢复原先配置,去掉database-schema即可。

原因查找过程:

1、oracle数据库当flowable用户存在工作流相关表的时候,ftest用户初始化失败(自动建表失败)。

2、删除flowable用户,ftest初始化成功。

3、再次新建flowable用户,使用flowable用户连接,初始化失败。同时发现,yml文件中,存在flowable.database-schema属性,(解释为:In some situations you want to set the schema to use for table checks / generation if the database metadata doesn’t return that correctly.)。将其设置为flowable后,启动时抛出异常(SQLFeatureNotSupportedException),异常抛出点为com.alibaba.druid.pool.DruidPooledConnection.setSchema。查看Druid源码,当调用setSchema会无条件抛出异常。。

4、因此可以确定的是,目前遇到的工作流无法初始化,是因为同一个原因引起:数据库中,存在其他已经初始化过的用户/域

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-02-28 15:36:32  更:2022-02-28 15:40:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 12:09:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码