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包,如下图:

微信图片_20200709102105.png

 2)找到初始化的sql,修改为下图:(在table前加上schema,前提需要在瀚高数据库中建好这个schema) 

微信图片_20200709103119.png

  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中的报错位置:

微信图片_20200709105722.png

    发现表前面都有${prefix}参数,因此判断是引用了这个参数,与数据库无关;

  5)两种解决方案:

   第一种:添加配置参数

   第二种:修改源码包:

找到postgres.properties添加prefix=当前schema,然后解压缩工具覆盖替换;记得刷新项目或Update Project,确保修改的生效。

微信图片_20200709110334.png

 重启项目,发现问题已解决。

 本文仅是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

请使用浏览器的分享功能分享到微信等