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()函数,在瀚高数据库中如何替换使用?

Oracle数据库中stragg()函数,在瀚高数据库中如何替换使用?

Oracle中的sql%rowcount在瀚高数据库中的兼容方案