一文带你学会GaussDB与兼容activiti 5.14的兼容配置【华为根技术】
【摘要】 GaussDB 兼容 Activiti 5.14 需要从数据库兼容性配置、Activiti 配置调整、SQL 语法适配等方面入手,核心是让 Activiti 5.14 的数据库操作(表结构初始化、CRUD、事务等)能在 GaussDB 上正常运行。一、前提:确认 GaussDB 的兼容性模式Activiti 5.14 原生支持 PostgreSQL、MySQL 等主流数据库,而 GaussD...
GaussDB 兼容 Activiti 5.14 需要从数据库兼容性配置、Activiti 配置调整、SQL 语法适配等方面入手,核心是让 Activiti 5.14 的数据库操作(表结构初始化、CRUD、事务等)能在 GaussDB 上正常运行。
一、前提:确认 GaussDB 的兼容性模式
Activiti 5.14 原生支持 PostgreSQL、MySQL 等主流数据库,而 GaussDB(尤其是 GaussDB 100/200)通常兼容 PostgreSQL 协议和语法。建议把GaussDB 配置为PostgreSQL 兼容模式(默认可能已开启,可以去通过
show server_version;
确认兼容的 PostgreSQL 版本),为 Activiti 提供基础兼容性。二、核心配置步骤
1. 调整 Activiti 5.14 的数据库连接配置
Activiti 通过
activiti.cfg.xml
(或 Spring 配置)指定数据库连接信息,需修改为 GaussDB 的连接参数:- 替换 JDBC 驱动:使用 GaussDB 的 JDBC 驱动(如
com.huawei.gauss200.jdbc.Driver
,需根据 GaussDB 版本下载对应驱动包,放入项目依赖)。 - 修改连接串:按 GaussDB 的 JDBC 格式配置(参考之前的连接串配置)。
- 指定数据库类型:告知 Activiti 使用 PostgreSQL 的适配策略(因 GaussDB 兼容 PostgreSQL)。
修改一下activiti.cfg.xml文件
<bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration"> <!-- 数据库连接配置 --> <property name="jdbcUrl" value="jdbc:gaussdb://192.168.1.100:8000/activiti_db?currentSchema=activiti" /> <property name="jdbcDriver" value="com.huawei.gauss200.jdbc.Driver" /> <property name="jdbcUsername" value="username" /> <property name="jdbcPassword" value="password" /> <!-- 数据库类型:指定为postgresql(GaussDB兼容PostgreSQL) --> <property name="databaseType" value="postgresql" /> <!-- 初始化策略:自动创建表结构(首次运行时) --> <property name="databaseSchemaUpdate" value="true" /> <!-- 其他配置(如事务、连接池等) --> <property name="transactionManager" ref="transactionManager" /> </bean>
2. 适配 Activiti 的表结构初始化语句
Activiti 5.14 启动时会自动创建一系列表(如
ACT_RE_PROCDEF
、ACT_RU_EXECUTION
等)- 自增主键:Activiti 对 PostgreSQL 使用
SERIAL
类型作为自增主键,GaussDB 兼容SERIAL
(本质是integer
+ 自增序列),通常无需修改;若出现问题,可替换为BIGSERIAL
(对应bigint
)。 - 字符集与排序规则:GaussDB 默认字符集可能为
UTF8
,需确保与 Activiti 表的字符集一致,可在建表时指定ENCODING 'UTF8'
。 - 约束与索引:GaussDB 对某些约束(如外键、唯一索引)的语法可能略有差异,若初始化失败,需提取 Activiti 的建表脚本(可从
activiti-engine-x.x.x.jar
的org/activiti/db/create
目录中找到postgresql
脚本),手动修改后在 GaussDB 中执行。
比如:调整后的建表语句(我以 ACT_RE_DEPLOYMENT 为例):
CREATE TABLE ACT_RE_DEPLOYMENT ( ID_ VARCHAR(64) NOT NULL, NAME_ VARCHAR(255), DEPLOY_TIME_ TIMESTAMP, PRIMARY KEY (ID_) ) WITH (ORIENTATION = ROW, COMPRESSION = NO); -- GaussDB的表存储参数
3. 处理 SQL 语法与函数差异
Activiti 5.14 的内部 SQL 操作可能依赖 PostgreSQL 的特定函数(如日期函数、字符串处理函数),若 GaussDB 存在兼容差异,需针对性修改:
- 日期函数:例如 PostgreSQL 的
NOW()
在 GaussDB 中可直接使用(兼容);若涉及DATE_PART
等函数,GaussDB 通常也支持,无需修改。 - 字符串函数:如
SUBSTRING
、CONCAT
等函数在 GaussDB 中与 PostgreSQL 兼容,一般无需调整。 - 分页语法:Activiti 使用
LIMIT ? OFFSET ?
进行分页,GaussDB 完全支持该语法,无需修改。
若出现特定 SQL 报错,可通过以下方式解决:
- 开启 Activiti 的 SQL 日志(
<property name="jpaHandleTransaction" value="true" />
+ 日志级别DEBUG
),定位报错 SQL。 - 自定义 Activiti 的
SqlSession
,替换兼容 GaussDB 的 SQL 语句(需继承org.activiti.engine.impl.db.DbSqlSession
并重写对应方法)。
4. 事务与连接池适配
- 事务隔离级别:GaussDB 支持常见的事务隔离级别(如
READ COMMITTED
),与 Activiti 默认要求一致,无需额外配置。 - 连接池配置:若使用 Druid、Hikari 等连接池,需确保连接池参数适配 GaussDB(如
maxPoolSize
、idleTimeout
),避免连接超时或资源耗尽。
比如(Druid 连接池配置):
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"> <property name="url" value="jdbc:gaussdb://192.168.1.100:8000/activiti_db" /> <property name="driverClassName" value="com.huawei.gauss200.jdbc.Driver" /> <property name="username" value="username" /> <property name="password" value="password" /> <property name="maxActive" value="20" /> <property name="minIdle" value="5" /> <property name="validationQuery" value="SELECT 1" /> <!-- GaussDB支持的验证语句 --> </bean>
三、测试和验证一下
- 表结构初始化:启动 Activiti 引擎,检查是否成功创建所有表(共 23 张左右,前缀为
ACT_
)。 - 流程部署:部署一个简单的 BPMN 流程,验证
ACT_RE_PROCDEF
、ACT_GE_BYTEARRAY
等表是否正确插入数据。 - 流程运行:启动流程实例,检查
ACT_RU_EXECUTION
、ACT_RU_TASK
等运行时表是否正常记录数据,任务完成后是否正确更新到历史表(ACT_HI_*
)。 - 异常场景:模拟流程中断、并发操作,验证事务回滚和数据一致性是否正常。
四、常见的问题和一些简单的解决方法推荐
-
问题 1:如果表创建失败,提示 “不支持的类型 SERIAL”
解决:将建表语句中的SERIAL
替换为BIGINT
+ 手动创建序列(如CREATE SEQUENCE ACT_GE_PROPERTY_SEQ START WITH 1 INCREMENT BY 1
),并在插入时使用nextval('序列名')
。 -
问题 2:如果SQL 报错 “函数 xxx 不存在”
解决:确认 GaussDB 是否支持该函数,若不支持,修改 Activiti 的 SQL 脚本,替换为 GaussDB 兼容的函数(如用SUBSTR
替代SUBSTRING
,视具体情况而定)。 -
问题 3:如果连接超时或频繁断开
解决:调整 GaussDB 的idle_in_transaction_session_timeout
参数,或在连接池配置中增加validationQuery
定期验证连接。
总结一下下
GaussDB 兼容 Activiti 5.14 的核心是利用其 PostgreSQL 兼容性,通过调整连接配置、适配表结构和 SQL 语法,确保 Activiti 的数据库操作在 GaussDB 上正常执行。实际操作中需结合具体报错信息逐步调试,重点关注表初始化、SQL 函数和事务处理三个环节。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)