欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

适用于 KingbaseES V8 的可流动工作流程适配器

最编程 2024-05-01 17:29:22
...

目前,flowable支持mysql、postgreSQL、DB2、Oracle等数据库,官方暂不支持国产数据库KingbaseES。因项目需要,尝试修改flowable 6.4支持KingbaseES V8,配置方法如下文。

1、数据配置

nexus私服仓库上传kingbaseES V8的jdbc驱动,同时配置pom文件
项目中配置数据库连接,因为项目使用的是spring boot,配置如下:

datasource:
	driver-class-name:com.kingbase8.Driver
	url:jdbc:kingbase8://127.0.0.1:54321/TEST
	username:SYSTEM
	password:111

2、工作流引擎初始化

工作流初始化的时候会加载数据库配置,会根据数据库类型,加载项目下的差异化sql脚本,具体流程:org.flowable.app.engine.AppEngineConfiguration中的init方法:

protected void init() {
        initEngineConfigurations();
        initConfigurators();
        configuratorsBeforeInit();
        initCommandContextFactory();
        initTransactionContextFactory();
        initCommandExecutors();
        initIdGenerator();
        initExpressionManager();
        
        if (usingRelationalDatabase) {
            initDataSource();
        }
        
        if (usingRelationalDatabase || usingSchemaMgmt) {
            initSchemaManager();
            initSchemaManagementCommand();
        }

        initVariableTypes();
        initBeans();
        initTransactionFactory();

        if (usingRelationalDatabase) {
            initSqlSessionFactory();
        }

        initSessionFactories();
        initServices();
        initDataManagers();
        initEntityManagers();
        initDeployers();
        initAppDefinitionCache();
        initAppResourceConverter();
        initDeploymentManager();
        initClock();
        initIdentityLinkServiceConfiguration();
        initVariableServiceConfiguration();
        configuratorsAfterInit();
        initBusinessCalendarManager();
    }

其中initDataSource会初始化数据库类型,调用initDatabaseType,initDatabaseType中获取数据库类型的方式如下

databaseType = databaseTypeMappings.getProperty(databaseProductName);

databaseTypeMappings是一个定义的Properties,存储数据库类型的映射,之后在initSqlSessionFactory 中调用

properties.load(getResourceAsStream(pathToEngineDbProperties()));
public String pathToEngineDbProperties() {
    return "org/flowable/common/db/properties/" + databaseType + ".properties";
}

会根据数据库的类型查找具体的配置文件,然后加载进initMybatisConfiguration的配置,而配置文件中的写的就是具体的分页方式,如下是mysql.properties文件的内容

limitAfter=LIMIT #{maxResults} OFFSET #{firstResult}

金仓的分页方式和mysql的一样,所以我们之后可以共用

3、更改代码适配金仓

如上分析我们只需要增加一个金仓的映射,并把映射的值设置为与mysql一致

在org.flowable.common.engine.impl.AbstractEngineConfiguration中添加如下代码

public static final String DATABASE_TYPE_KINGBASEES = "mysql";

在getDefaultDatabaseTypeMappings映射中添加

databaseTypeMappings.setProperty("KingbaseES", DATABASE_TYPE_KINGBASEES);

原文地址:https://www.cnblogs.com/DF-Kyun/p/13497135.html