Activiti 6自動部署後不生成數據庫act_hi_*的解決方法

本文將從多個方面詳細闡述Activiti 6自動部署後不生成數據庫act_hi_*的問題,並提供對應的代碼示例。

一、問題分析

在使用Activiti 6部署流程後,我們發現act_hi_*相關的表並沒有生成,這樣就導致了歷史數據無法記錄,給後續的跟進和分析帶來了麻煩。

我們來分析一下這個問題。在Activiti 5中,歷史數據是通過定時器將當前運行的流程實例信息插入到歷史表中的,而在Activiti 6中,採用了stream的方式將信息插入到歷史表中,這樣就不需要定時器了,因此在Activiti 6中不會再生成與定時器相關的act_hi_*表。

因此,部署流程時不生成數據庫act_hi_*的問題,是Activiti 6採用stream方式處理歷史數據的特性導致的。

二、解決方法

針對這個問題,我們有以下幾種解決方法:

1、使用HistoricDataAutoConfiguration

Activiti 6提供了HistoricDataAutoConfiguration類,可以用來配置歷史數據表的相關信息,從而自動生成act_hi_*表:


@Configuration
public class HistoricDataAutoConfiguration {

    @Bean(name = "dbSchemaHistoryInitializer")
    @ConditionalOnProperty(prefix = "spring.activiti", name = {"database-schema-update"}, havingValue = "true")
    public SchemaHistoryInitializer activitiSchemaHistoryInitializer(DataSource dataSource, ProcessEngineConfiguration processEngineConfiguration) {
        SchemaHistoryInitializer schemaHistoryInitializer = new SchemaHistoryInitializer();
        schemaHistoryInitializer.setDataSource(dataSource);
        schemaHistoryInitializer.setProcessEngineConfiguration(processEngineConfiguration);
        return schemaHistoryInitializer;
    }   
}

2、手動創建act_hi_*表

在Activiti 6中,雖然沒有自動生成act_hi_*表的機制了,但是我們仍然可以手動創建這些表。使用JDBC或者其他工具,手動創建這些歷史表即可:


create table ACT_HI_ACTINST (
    ID_                   VARCHAR2(64),
    PROC_DEF_ID_          VARCHAR2(64),
    PROC_INST_ID_         VARCHAR2(64),
    EXECUTION_ID_         VARCHAR2(64),
    ACT_ID_               VARCHAR2(255),
    TASK_ID_              VARCHAR2(64),
    CALL_PROC_INST_ID_    VARCHAR2(64),
    ACT_NAME_             VARCHAR2(255),
    ACT_TYPE_             VARCHAR2(255),
    ASSIGNEE_             VARCHAR2(255),
    START_TIME_           TIMESTAMP(6),
    END_TIME_             TIMESTAMP(6),
    DURATION_             NUMBER(19,0),
    DELETE_REASON_        VARCHAR2(4000),
    TENANT_ID_            VARCHAR2(255),
    REMARK_               VARCHAR2(255)
);

create table ACT_HI_ATTACHMENT (
    ID_                   VARCHAR2(64),
    PROC_INST_ID_         VARCHAR2(64),
    TASK_ID_              VARCHAR2(64),
    NAME_                 VARCHAR2(255),
    DESCRIPTION_          VARCHAR2(4000),
    TYPE_                 VARCHAR2(255),
    CONTENT_ID_           VARCHAR2(64),
    TIME_                 TIMESTAMP(6),
    USER_ID_              VARCHAR2(255),
    TENANT_ID_            VARCHAR2(255),
    REMARK_               VARCHAR2(255)
);

-- other act_hi_* tables


3、使用自行開發的HistoricDataStreamingAdapter

如果以上兩種方法都無法解決問題,我們可以自行開發關於HistoricDataStreamingAdapter的適配器,自行處理歷史數據的表:


@Component
public class HistoricDataStreamingAdapter extends AbstractMapBasedDataSerializableFactories {

    @Override
    public List getStreamFactories() {
        List factories = super.getStreamFactories();

        if (factories == null) {
            factories = new ArrayList<>();
        }

        factories.add(HistoricActivityInstanceEventRecord.class);
        factories.add(HistoricIdentityLinkEventRecord.class);
        factories.add(HistoricProcessInstanceEventRecord.class);
        factories.add(HistoricTaskInstanceEventRecord.class);
        factories.add(HistoricVariableInstanceEventRecord.class);
        factories.add(IdentityLinkEventRecord.class);
        factories.add(JobEntityEventRecord.class);
        factories.add(ModelEntityEventRecord.class);
        factories.add(ProcessDefinitionEntityEventRecord.class);
        factories.add(ProcessDefinitionInfoEntityEventRecord.class);
        factories.add(ProcessDefinitionInfoEntityEventRecord.ProcessDefinitionInfoEntityEventRecordChild.class);
        factories.add(TaskEntityEventRecord.class);
        factories.add(VariableInstanceEntityEventRecord.class);
        factories.add(BatchEventRecord.class);
        return factories;
    }
}

三、總結

本文從問題分析和解決方法兩方面對Activiti 6自動部署後不生成數據庫act_hi_*的問題進行了詳細的闡述。我們可以使用HistoricDataAutoConfiguration類來自動生成act_hi_*表,也可以手動創建這些表,還可以開發自己的HistoricDataStreamingAdapter來解決這個問題。

原創文章,作者:XKIAX,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/374150.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
XKIAX的頭像XKIAX
上一篇 2025-04-27 15:27
下一篇 2025-04-27 15:27

相關推薦

發表回復

登錄後才能評論