1. 程式人生 > 實用技巧 >flowable工作流適配KingbaseES V8

flowable工作流適配KingbaseES V8

目前,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);