activiti6.0.0 二次开发兼容达梦数据库(亲测有效)

news/2025/1/6 17:46:53/文章来源:https://www.cnblogs.com/yzy2016/p/18652048

一、 前因

最近公司做数据库国产化,数据从MySql数据库中迁移到达梦(DM8),在迁移过程中,当迁移工作流(Activiti6.0.0)时,提换达梦(DM8)数据库驱动后启动过程报错:

Caused by: org.activiti.engine.ActivitiException: couldn't deduct database type from database product name 'DM DBMS'

二、 错误分析

Activiti6.0.0源码并不兼容达梦数据库:

在这里插入图片描述
在activiti-engine-6.0.0.jar在org.activiti.db.create sql下也没得dm sql语句:

在这里插入图片描述

所以,当启动项目时报:Caused by: org.activiti.engine.ActivitiException: couldn't deduct database type from database product name 'DM DBMS'。

三、 解决方案

activiti8版本以上据说可以兼容达梦数据库,小编没升级,不知道是否兼容,有待验证,哈哈。言归正传,要让Activiti6.0.0兼容达梦数据库,需要修改对应的源码,我们需要再项目中找到activiti-engine-6.0.0.jar这个jar包,找到下面需要修改的这几个类:ProcessEngineConfigurationImpl、DbSqlSession、DbSqlSessionFactory和AbstractQuery这个四个类。在本地项目里写一个路径一样、类名也一样的类来代替源码中的类运行。

在这里插入图片描述

3.1 修改ProcessEngineConfigurationImpl类

1、在org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl类,增加dm成员变量:

  • public static final String DATABASE_TYPE_DM = "dm";

在这里插入图片描述
2、在org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl,修改getDefaultDatabaseTypeMappings():

  • databaseTypeMappings.setProperty("dm", DATABASE_TYPE_DM);
  • databaseTypeMappings.setProperty("DM DBMS",DATABAS E_TYPE_ORACLE);

在这里插入图片描述

3.2 修改DbSqlSessionFactory类

在org.activiti.engine.impl.db.DbSqlSessionFactory,修改initBulkInsertEnabledMap(String databaseType)添加:
"dm".equals(databaseType)。

在这里插入图片描述

3.3 修改DbSqlSession类

在org.activiti.engine.impl.db.DbSqlSession类里,借用oracle的sql文件来执行sql语句,具体做法:

 // 当databaseType 为dm时,借用oracle的sql文件来代替执行if (ProcessEngineConfigurationImpl.DATABASE_TYPE_DM.equals(databaseType)) {databaseType = ProcessEngineConfigurationImpl.DATABASE_TYPE_ORACLE;}

在这里插入图片描述

3.4 修改AbstractQuery类

在 org.activiti.engine.impl.AbstractQuery,修改addOrder(String column, String sortOrder, NullHandlingOnOrder nullHandlingOnOrder)添加:

ProcessEngineConfigurationImpl.DATABASE_TYPE_DM.equals(databaseType)

在这里插入图片描述

3.5 解决无法访问javax.persistence.EntityManagerFactory报错

当完成上面的操作,启动项目报错:
java: 无法访问javax.persistence.EntityManagerFactory
找不到javax.persistence.EntityManagerFactory的类文件

在这里插入图片描述
需要在pom.xml添加依赖:

<!--        2.2版本的persistence--><dependency><groupId>javax.persistence</groupId><artifactId>javax.persistence-api</artifactId></dependency><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-core</artifactId><version>5.6.7.Final</version><exclusions><exclusion><groupId>commons-collections</groupId><artifactId>commons-collections</artifactId></exclusion></exclusions></dependency>

3.6 解决cannot be null when 'hibernate.dialect'报错

你以为完成上边的步骤就完事了?no,no,no,当你启动羡慕时报错:
Caused by: org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set

在这里插入图片描述
需要再配置文件里面添加:

spring:jpa:properties:hibernate:dialect: org.hibernate.dialect.Oracle10gDialectshow-sql: ture

然后再启动项目就不会报错了。。。亲测有效。有个改版的activiti-engine-6.0.0.jar直接替换用就行,嘻嘻嘻。

在这里插入图片描述

参考资料:https://blog.csdn.net/qq_42014561/article/details/128239874

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/863909.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MYSQL中Join的用法.240430

1、笛卡尔积(没有加筛选条件的内连接) 两表关联,把左表的列和右表的列通过笛卡尔积的形式表达出来。 mysql> select * from t1 join t2;或者 mysql> select * from t1 inner join t2;或者 mysql> select * from t1, t2;2、左连接 两表关联,左表全部保留,右表关联不…

idea左上角project一片绿的解决方法.240712

idea突然project底色一片绿,真的心里慌得一批。。解决方法: 打开File-Settings,按图示找到地方,关闭FileColor,即可。.zstitle { width: 280px; text-align: center; font-size: 26px } .zsimgweixin { width: 280px } .zsimgali { width: 280px; padding: 0px 0px 50px 0…

PCS7 笔记

400H和410H400H系统属于老版本CPU,在售的越来愈少。410H作为400H的替代和更新产品出现。冗余机制同步周期同步 事件同步:在西门子400H/410H cpu中,两个CPU内部的数据,必须保持高度统一,属于西门子冗余PLC的专利,西门子冗余均为事件同步。在西门子400H/410H冗余PLC中,不推…

2024-2025-1 20241411王思棋《计算机基础与程序设计》课程总结

每周作业链接汇总 第一周作业:基于VirtualBox安装Ubuntu,从而安装Linux系统。快速浏览一遍教材计算机科学概论(第七版),课本每章提出至少一个自己不懂的或最想解决的问题并在期末回答这些问题第二周作业:数字化、信息安全第三周作业:数字分类与计数法、位置计数法、进制…

Verilog2_硬件描述语言

Verilog内容总结2_硬件描述语言一、硬件描述语言概述 1.主要的硬件描述语言VHDL(VHSIC HDL): 天然支持并发描述,允许在同一个文件中定义多个并发执行的进程;可读性和可维护性较好,适合于大型项目和团队合作;支持用户定义的数据类型;可以使用抽象类型为系统建模 Verilog…

Nginx-CentOS设置网卡配置固定IP地址

一、未设置网卡前 唔怕ping通网络二、ip addr 查看网络配置 ip addr三、修改 ifcfg-ens33 配置文件 vi /etc/sysconfig/network-scripts/ifcfg-ens33 四、ONBOOT = no 改为 yes (启动操作系统后一并启动网卡)五、重启网卡 systemctl restart network 此时再去ping qq.com的话…

授权MYSQL数据库用户权限.241127

授权 queryusr用户查询test数据库 grant select on test.* to queryusr@%; flush PRIVILEGES收回queryusr用户查询test数据库权限,用revoke REVOKE usage on test.* from queryusr@%; flush PRIVILEGES查queryusr用户目前授权的情况 show grants for queryusr.zstitle { width…

OpenEuler安装MongoDB并配置访问密码.241127

1. 下载MongoDB、安装 wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel80-4.4.18.tgz tar zxvf mongodb-linux-x86_64-rhel80-4.4.18.tgz移动到/home路径下 mv mongodb-linux-x86_64-rhel80-4.4.18 /home cd /home mv mongodb-linux-x86_64-rhel80-4.4.…

集成规范CICD.241127

集成方式说明a.用户向Gitlab提交代码,代码中包含 Dockerfile, JenkinsFile文件。 b.Jenkins监听Gitlab代码库的推送和变更事件 c.Jenkins调用maven插件对源码进行编译打包 d.Jenkins调用docker工具根据Dockerfile文件生成镜像,并推送镜像到Docker Registry仓库(Habor) e.Je…

比较文学的学科特色

学科历史和理论建构部分,小心名词解释一、比较文学的研究对象是什么? 比较文学的研究对象是跨民族、跨语言、跨文化界限和跨学科的各种文学关系。各种文学关系的具体内涵:事实联系中西进:《源氏物语》与白乐天 田中隆昭:《源氏物语》与《长恨歌传》等唐代传奇的表现方法--从…

ENVI魔术棒Magic wand

(1)工具栏中打开ROI Tool,按住Ctrl+鼠标左键,在水域地方点击鼠标。 (2)打开魔术棒Magic Wand工具栏,同时也在图像上选择了一部分区域。 注:按住Ctrl键可以同时识别多个地方。