activiti升级支持kingbaseES(其他数据库也可以参考)


前言

提示:本篇文章的activiti内部做了扩展,所以没有贴代码仅供参考。

1.首先准备好驱动和方言包

我是v7版本的,找的都是能支持v7的jar,v8去官网下。

2.复制Oracle的类修改名字为kingbase

提示:因为kingbase跟postgresql比较相似,直接复制就行。
在这里插入图片描述
KingbaseDialect也复制postgresql的
kingbaseadsads =

在这里插入图片描述

3.添加数据库类型

在这里插入图片描述

红讯的数据库类型也要加上
在这里插入图片描述

4.把数据库的类型判断补齐

在这里插入图片描述

5.找到ProcessEngineConfigurationImpl类的getDefaultDatabaseTypeMappings方法

添加kingbase
在这里插入图片描述

6.DbSqlSessionFactory照着postgre复制

DbSqlSessionFactory中的这些key都对应着相应的sql语句
在这里插入图片描述

在这里插入图片描述

7.mybatis-config.xml,spring-base.xml添加kingbase

在这里插入图片描述
在这里插入图片描述

8.补充脚本(照着现有的复制即可)

在这里插入图片描述

9.注意事项

activit作为一种轻量级,可嵌入的BPM引擎,广泛应用于企业级管理系统,然而他只支持一些数据库,国产数据库基本不支持,但我们可以扩展

原生支持的数据库:
在这里插入图片描述

#因为kingbase是基于PostgreSQL来二次开发的 ,所以db.type也可以用postgres,
db.url=jdbc:kingbase://xxx.xxx.xxx.xxx:54321/GTKJSYS
db.username=xxx
db.password=xxx
db.jpaPlatform=org.hibernate.dialect.KingbaseDialect
db.driver=com.kingbase.Driver
db.type=postgres //kingbase也可以

如果activiti的表已经建好了,要把databaseSchemaUpdate属性修改成none,
需要跟spring-activiti.xml的databaseSchemaUpdate保持统一。(这个创表是根据activiti-engine-5.18.0.jar里面的sql进行创建的)(建议不是activiti原生支持的数据库不要套用里面的建表sql,就做数据库迁移的时候把表弄好。kingbaseESV8版本的有对应的activiti-engine的.jar包,我们目前使用的是V7没有对应的包)总结就是在V7版本没有对应的activiti-engine的.jar包时,不要去用db.type=postgres调用postgres的语句来创表(会出错),尽量在数据迁移的时候把表弄好,在有表的情况下就可以用kingbase
在这里插入图片描述

#这个了解下就行了

1:Activiti使用
Activiti使用报错:org.activiti.engine.ActivitiException: couldn't deduct database type from database product name 'KingbaseES',是因为Activiti不支持国产数据库。适配KingbaseES,修改方式有两种:
1.将Activiti参数databaseType配置为postgres。配置示例如下:
<bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
<property name="jdbcDriver" value="com.kingbase8.Driver"></property>
<property name="jdbcUrl" value="jdbc:kingbase8://192.168.222.128:54321/TEST"></property>
<property name="jdbcUsername" value="SYSTEM"></property>
<property name="jdbcPassword" value="123456"></property>
<!-- 没有表创建表 -->
<property name="databaseSchemaUpdate" value="true"></property>
<property name="databaseType" value="postgres"></property>
</bean>
该方法会在第二次启动时出现自动建表表已存在问题(这是因为R3默认为大写,pg为小写),解决方案为在表建成功后,将参数databaseSchemaUpdate的值改为none。
<property name="databaseSchemaUpdate" value="none"></property>
SpringBoot整合Activiti时,无法直接配置databaseType参数,因为activiti-spring-boot-starter-basic里没有提供该参数。可以更换新的驱动包(官网的驱动包即可),然后配置连接参数productName=PostgreSQL,如:
jdbc:kingbase8://192.168.222.128:54321/TEST?productName=PostgreSQL
如果无法更换驱动包,则需要自行扩展配置。添加如下两个文件:
ActivitiConfig.java
package com.example.activiti.config;
import java.io.IOException;
import javax.sql.DataSource;
import org.activiti.spring.SpringAsyncExecutor;
import org.activiti.spring.SpringProcessEngineConfiguration;
import org.activiti.spring.boot.AbstractProcessEngineAutoConfiguration;
import org.activiti.spring.boot.ActivitiProperties;
import org.activiti.spring.boot.JpaProcessEngineAutoConfiguration;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
@Configuration
@AutoConfigureAfter({ DataSourceAutoConfiguration.class })
@AutoConfigureBefore({ JpaProcessEngineAutoConfiguration.class })
public class ActivitiConfig {
@Configuration
@EnableConfigurationProperties({ ActivitiProperties.class })
public static class ActivitiConfiguration extends AbstractProcessEngineAutoConfiguration {
private ActivitiDatasourceProperties activitiDatasourceProperties;
public ActivitiDatasourceProperties getActivitiDatasourceProperties() {
return activitiDatasourceProperties;
}
@Autowired
public void setActivitiDatasourceProperties(ActivitiDatasourceProperties activitiDatasourceProperties) {
this.activitiDatasourceProperties = activitiDatasourceProperties;
}
@Bean
@ConditionalOnMissingBean
public PlatformTransactionManager transactionManager(DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean
@ConditionalOnMissingBean
public SpringProcessEngineConfiguration springProcessEngineConfiguration(DataSource dataSource,
PlatformTransactionManager transactionManager, SpringAsyncExecutor springAsyncExecutor)
throws IOException {
SpringProcessEngineConfiguration config = baseSpringProcessEngineConfiguration(dataSource,
transactionManager, springAsyncExecutor);
config.setDatabaseType(this.activitiDatasourceProperties.getDatabaseType());
return config;
}
}
}
ActivitiDatasourceProperties.java
package com.example.activiti.config;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@ConfigurationProperties(prefix = "spring.activiti")
@Component
public class ActivitiDatasourceProperties {
private String databaseType;
public String getDatabaseType() {
return databaseType;
}
public void setDatabaseType(String databaseType) {
this.databaseType = databaseType;
}
}
application.properties
#数据库类型,必须配置
spring.activiti.database-type=postgres
#第一次执行配置为true,自动建表,之后执行改为none
spring.activiti.database-schema-update=none
2.	替换activiti-engine.jar包,目前R2、R3支持5.10,5.14,5.20,5.21.0,6.0.0五个版本,使用该方式无需配置databaseType,也不会出现自动建表表已存在问题,但是支持版本较少,activiti各版本之间不通用,所以推荐使用第一种方式。


总结

工作流支持国产数据库基本就是这么个流程,大家可以参考一下

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值