学习篇-Activiti-12-历史记录配置

一、历史记录配置

在流程执行的过程中,会产生一些流程相关的数据,例如流程实例、流程任务和流程参数等 ,随着流程的进行与结束,这些数据将会被从流程数据表中删除,为了能保存这些数据, Activiti 提供了历史数据表,可以将这些数据保存到历史数据表中。

  • 对于这些历史数据,保存到何种粒度, Activiti 提供了 history 属性对其进行配置 。 history 属性有点像 log4j 的日志输出级别,该属性有以下四个值 。

    • 配置HistoryLevel
      • none:不记录历史流程,性能高,流程结束后不可读取
      • activiti:归档流程实例和活动实例,流程变量不同步
      • audit:默认值,在activiti基础上同步变量值,保存表单属性
      • full:性能较差,记录所有实例和变量细节变化。
  • 代码逻辑实现

    package com.laogoubi.config;
    
    import com.google.common.collect.Maps;
    import org.activiti.engine.history.HistoricActivityInstance;
    import org.activiti.engine.history.HistoricDetail;
    import org.activiti.engine.history.HistoricTaskInstance;
    import org.activiti.engine.history.HistoricVariableInstance;
    import org.activiti.engine.runtime.Execution;
    import org.activiti.engine.runtime.ProcessInstance;
    import org.activiti.engine.task.Task;
    import org.activiti.engine.test.ActivitiRule;
    import org.activiti.engine.test.Deployment;
    import org.apache.commons.lang3.builder.ToStringBuilder;
    import org.apache.commons.lang3.builder.ToStringStyle;
    import org.junit.Rule;
    import org.junit.Test;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    import java.util.List;
    import java.util.Map;
    
    /**
     * @ClassName ConfigMDCTest
     * @Description History测试
     * @Author eastern
     * @Date 2020/6/28 上午11:49
     * @Version 1.0
     **/
      public class ConfigHistoryLevelTest {
      	private static final Logger logger = LoggerFactory.getLogger(ConfigHistoryLevelTest.class);
    
    	@Rule
    	public ActivitiRule activitiRule = new ActivitiRule("activiti_history.cfg.xml");
    
    	@Test
    	@Deployment(resources = {"com/laogoubi/my-process.bpmn20.xml"})
    	public void test() {
    		// 启动流程
    		startProcess();
    
    		// 修改变量
    		changeVariable();
    
    		// 提交表单 task
    		submitFommTask();
    
    		// 输出历史内容
    		// 输出历史活动
    		showHistoricActivity();
    		// 输出历史变量
    		showHistoricVariable();
    		// 输出历史表单
    		showHistoricTask();
    		// 输出历史详情表单
    		showHistoryForm();
    		// 输出历史详情
    		showHistoryDetail();
    	}
    
    	private void showHistoryDetail() {
    		List<HistoricDetail> historicDetails = activitiRule.getHistoryService().createHistoricDetailQuery().listPage(0
    				, 100);
    		for (HistoricDetail historicDetail : historicDetails) {
    			logger.info("historicDetail = {}", toString(historicDetail));
    		}
    		logger.info("historicDetails.size", historicDetails.size());
    	}
    
    	private void showHistoryForm() {
    		List<HistoricDetail> historicDetailsForm = activitiRule.getHistoryService().createHistoricDetailQuery().formProperties().listPage(0
    				, 100);
    		for (HistoricDetail historicDetail : historicDetailsForm) {
    			logger.info("historicDetail = {}", toString(historicDetail));
    		}
    		logger.info("historicDetailsForm.size", historicDetailsForm.size());
    	}
    
    	private void showHistoricTask() {
    		List<HistoricTaskInstance> historicTaskInstances =
    				activitiRule.getHistoryService().createHistoricTaskInstanceQuery().listPage(0, 100);
    		for (HistoricTaskInstance historicTaskInstance : historicTaskInstances) {
    			logger.info("historicTaskInstance = {}", historicTaskInstance);
    		}
    		logger.info("historicTaskInstances.size", historicTaskInstances.size());
    	}
    
    	private void showHistoricVariable() {
    		List<HistoricVariableInstance> historicVariableInstances =
    				activitiRule.getHistoryService().createHistoricVariableInstanceQuery().listPage(0, 100);
    		for (HistoricVariableInstance historicVariableInstance : historicVariableInstances) {
    			logger.info("historicVariableInstance = {}", historicVariableInstance);
    		}
    		logger.info("historicVariableInstances.size", historicVariableInstances.size());
    	}
    
    	private void showHistoricActivity() {
    		List<HistoricActivityInstance> historicActivityInstances =
    				activitiRule.getHistoryService().createHistoricActivityInstanceQuery().listPage(0, 100);
    		for (HistoricActivityInstance historicActivityInstance : historicActivityInstances) {
    			logger.info("historicActivityInstance = {}", historicActivityInstance);
    		}
    		logger.info("historicActivityInstances.size", historicActivityInstances.size());
    	}
    
    	private void submitFommTask() {
    		Task task = activitiRule.getTaskService().createTaskQuery().singleResult();
    		Map<String, String> properties = Maps.newHashMap();
    		properties.put("formKey1", "valuef1");
    		properties.put("formKey2", "valuef2");
    		activitiRule.getFormService().submitTaskFormData(task.getId(), properties);
    	}
    
    	private void changeVariable() {
    		List<Execution> executions = activitiRule.getRuntimeService().createExecutionQuery().listPage(0, 100);
    		for (Execution execution : executions) {
    			logger.info("execution = {}", execution);
    		}
    		logger.info("executions.size = {}", executions.size());
    		String id = executions.iterator().next().getId();
    		activitiRule.getRuntimeService().setVariable(id, "keyStart1", "value1_");
    	}
    
    	private void startProcess() {
    		Map<String, Object> params = Maps.newHashMap();
    		params.put("keyStart1", "value1");
    		params.put("keyStart2", "value2");
    
    		ProcessInstance processInstance = activitiRule.getRuntimeService().startProcessInstanceByKey("my-process");
    	}
    
    	static String toString(HistoricDetail historicDetail) {
    		return ToStringBuilder.reflectionToString(historicDetail, ToStringStyle.SHORT_PREFIX_STYLE);
    	}
    }
    
    
  • 配置:activiti_history.cfg.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans   http://www.springframework.org/schema/beans/spring-beans.xsd">
    
        <bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneInMemProcessEngineConfiguration">
            <property name="commandInvoker" ref="commandInvoker"/>
    <!--        <property name="history" value="none"></property>-->
    <!--        <property name="history" value="activity"></property>-->
    <!--        <property name="history" value="audit"></property>-->
            <property name="history" value="full"></property>
        </bean>
        <bean id="commandInvoker" class="com.laogoubi.interceptor.MDCCommandInvoker"></bean>
    </beans>
    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值