Spring整合Activiti,在瀚高数据库初始化时指定schema解决方案
Posted 瀚高PG实验室
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring整合Activiti,在瀚高数据库初始化时指定schema解决方案相关的知识,希望对你有一定的参考价值。
目录
环境
文档用途
详细信息
环境
系统平台:Microsoft Windows (64-bit) 10
版本:5.6.4
文档用途
本文介绍Spring整合Activiti 6.0.0和7.0.0.Beta1两个版本,在瀚高数据库初始化到指定schema的解决方案。
详细信息
1、Activiti参数
1)Spring整合Activiti时,首先修改/添加databaseType参数:
2)如果设置了databaseSchema参数,初始化时会报如下错误,具体原因暂未知:Caused by: org.activiti.engine.ActivitiException: Could not set database schema on connection
at org.activiti.engine.impl.db.DbSqlSessionFactory.openSession(DbSqlSessionFactory.java:81)
at org.activiti.engine.impl.interceptor.CommandContext.getSession(CommandContext.java:249)
at org.activiti.engine.impl.interceptor.CommandContext.getDbSqlSession(CommandContext.java:261)
2、Activiti自带表初始化到当前数据库的指定schema下
此平台下文章:《014834704 Activiti 连接瀚高数据库(APP)》,是创建的activiti数据库,activiti用户和activiti schema,因此activiti初始化时,自动初始化到了activiti schema下;如果不创建activiti数据库,activiti用户和activiti schema是默认初始化到public下的。
如果我想初始化到当前数据库的指定schema下,应该怎么实现?
方法是修改activiti源码包,6.0.0和7.0.0.Beta1两个版本已经实现了,5.22.0版本暂时没找到源码包里的配置在哪,暂未处理;大家可根据6.0.0和7.0.0.Beta1两个版本的操作方式修改5.22.0版本的源码即可。
具体操作如下,以6.0.0为例:
1)打开6.0.0的jar包,如下图:
2)找到初始化的sql,修改为下图:(在table前加上schema,前提需要在瀚高数据库中建好这个schema)
3)修改后,用解压缩工具打开jar,直接覆盖原来的sql文件(记得备份)。然后刷新项目或Update Project,确保修改的生效。目前只找到了这个解决办法,Activiti的其他配置参数,试过了不起作用。
启动项目,可能会有如下报错:
### Error querying database.
Cause: com.highgo.jdbc.util.PSQLException:
ERROR: 42P01: relation "act_ge_property" does not exist 位置:15
### The error may exist in org/activiti/db/mapping/entity/Property.xml
### The error may involve org.activiti.engine.impl.persistence.entity.PropertyEntityImpl.selectProperty-Inline
### The error occurred while setting parameters
### SQL: select * from ACT_GE_PROPERTY where NAME_ = ?
### Cause: com.highgo.jdbc.util.PSQLException: ERROR: 42P01: relation "act_ge_property" does not exist
一看就是表不存在的问题,但是发现数据库表已经初始化进去了;然后修改瀚高数据库的search_path添加上当前schema重启数据库使之生效后,还是报同样的错误。
4)然后去找org/activiti/db/mapping/entity/Property.xml中的报错位置:
发现表前面都有${prefix}参数,因此判断是引用了这个参数,与数据库无关;
5)两种解决方案:
第一种:添加配置参数。
第二种:修改源码包:
找到postgres.properties添加prefix=当前schema,然后解压缩工具覆盖替换;记得刷新项目或Update Project,确保修改的生效。
重启项目,发现问题已解决。
本文仅是6.0.0和7.0.0.Beta1两个版本在初始化时指定schema的问题,后期的使用有无隐患问题,暂未知。
拓展:由于Activiti在数据库进行初始化时,需要匹配数据库,因此如果是从其他数据库迁移到瀚高数据库的,而不是在瀚高数据库进行的初始化,则会有类型不匹配问题:
1)如果是新上线系统,没有历史数据,建议不迁移Activiti相关表,直接从瀚高数据库初始化;
2)如果有历史数据,则直接用瀚高迁移工具迁移,对于类型不匹配问题:
(1)可以先尝试用建类型转换的方法处理;
(2)再尝试用触发器解决;
(3)最后修改Activiti源码包中的xml配置文件,在配置文件的sql中加入类型转换。
虽然是修改源码包,但是不涉及反编译,只涉及解压缩和替换更新,因此操作很简单。
更多解决方案请登录【瀚高技术支持平台】查看https://support.highgo.com/#/index/docContent/a7350e7c010c3c8a
以上是关于Spring整合Activiti,在瀚高数据库初始化时指定schema解决方案的主要内容,如果未能解决你的问题,请参考以下文章
Oracle数据库中convert()函数,在瀚高数据库中如何替换使用?
Oracle数据库中convert()函数,在瀚高数据库中如何替换使用?
Oracle数据库中stragg()函数,在瀚高数据库中如何替换使用?