Activiti(五)--历史数据管理和流程引擎管理

1 历史数据管理

    1.1 历史流程实例查询

使用HistoryService的createHistoricProcessInstanceQuery方法可以得到HistoricProcessInstanceQuery对象,该对象主要用户流程实例的历史数据查询,流程实例的历史数据保存在ACT_HI_PROCINST表中,不管流程是否完成,只要创建了流程实例,流程实例的数据均会被保存到ACT_HI_PROCINST表

//查询已完成的流程
List<HistoricProcessInstance> datas = histroyService.createHistoricProcessInstanceQuery().finished().list();
//根据流程id查询
datas = historyService.createHistoricProcessInstanceQuery().processDefintionId(define.getId()).list();
//根据流程定义key查询
datas = historyService.createHistoricProcessInstanceQuery().processDefinitionKey(define.key()).list();
//根据业务主键查询
datas = historyService.createHistoricProcessInstanceQuery().processInstanceBusinessKey("businessKey1").list();
//根据流程实例id查询
datas = historyService.createHistoricProcessInstanceQuery().processInstanceId(pi1.getId()).list();
//查询没有完成的流程实例
historyService.createHistoricProcessInstanceQuery().unfinished().list();

    1.2 历史任务查询

List<HistoricTaskInstance> datas = historyService.createHistoricTaskInstanceQuery().finished().list();

datas = historyService.createHistoricTaskInstanceQuery().processDefinitionId(define.getId()).list();

datas = historyService.createHistoricTaskInstanceQuery().processDefinitionKey("testProcess").list();

datas = historyService.createHistoricTaskInstanceQuery().processDefinitionName("testProcess2").list();

datas = historyService.createHistoricTaskInstanceQuery().processFinished().list();

datas = historyService.createHistoricTaskInstanceQuery().processUnFinished().list();

datas = historyService.createHistoricTaskInstanceQuery().taskAssignee("crzayit").list();

datas = historyService.createHistoricTaskInstanceQuery().taskAssigneeLike("%zy%").list();

datas = historyService.createHistoricTaskInstanceQuery().taskDefinitionKey("userTask1").list();

datas = historyService.createHistoricTaskInstanceQuery().taskDueAfter(sdf.parse("2022-10-11 06:00:00")).list();

datas = historyService.createHistoricTaskInstanceQuery().taskDueBefore(sdf.parse("2022-10-11 06:00:00")).list();

datas = historyService.createHistoricTaskInstanceQuery().taskDueDate(sdf.parse("2022-10-11 06:00:00")).list();

List<HistoricTaskInstance> datas = historyService.createHistoricTaskInstanceQuery().unFinished().list();

    1.3 历史行为查询

List<HistoricActivityInstance> datas = historyService.createHistoricActivityInstanceQuery().activitiyId("endEvent1").list();

datas = historyService.createHistoricActivityInstanceQuery().activityInstanceId(datas.get(0).getId()).list();

datas = historyService.createHistoricActivityInstanceQuery().activityType("intermediateCatchEvent").list(); 

datas = historyService.createHistoryActivityInstanceQuery().finished().list();

datas = historyService.createHistoryActivityInstanceQuery().processInstanceId(pi2.getId()).list();

datas = historyService.createHistoryActivityInstanceQuery().taskAssignee("crazyit").list();

datas = historyService.createHistoryActivityInstanceQuery().unfinished().list();

    1.4 历史流程明细查询

//查询所有明细
List<HistoricDetail> datas = historyService.createHistoricDetailQuery().processInstanceId(pi.getId()).list();

//查询参数表
List<HistoricVariableInstance> hisVars = historyService.createHistoricVariableInstanceQuery().processInstanceId(pi.getId()).list();

    1.5 删除历史流程实例和历史任务

// 根据id删除历史任务数据
historyService.deleteHistoricTaskInstance(task.getId());

//删除流程实例的历史流程数据
historyService.deleteHistoricProcessInstance(pi1.getId());

//抛出错误,删除没有完成的流程实例历史数据
historyService.deleteHistoricProcessInstance(pi2.getId());

2 工作管理

    2.1 工作查询对象

对应存放工作的四个数据表,是以下四个工作查询对象
JobQuery:到一般工作表(ACT_RU_JOB)中查询数据
TimeJobQuery:到定时器工作表(ACT_RU_TIMER_JOB)中查询数据
DeadLetterJobQuery:到无法执行工作表(ACT_RU_DEADLETTER_JOB)中查询数据

    2.2 获取工作异常信息

当工作执行过程中出现异常时,各个工作表的EXCEPTION_STACK_ID_和EXCEPTION_MSG_字段会保存工作执行的异常信息,使用ManagementService的几个getXXXJobExceptionStacktrace方法可以获取这些异常信息,该方法会根据EXCEPTION_STACK_ID_字段所保存的值,到ACT_GE_BYTEARRAY表中查询相应的详细异常信息

//管理服务组件
ManagementService mService = engine.getManagementService();
//启动流程
runtimeService.startProcessInstanceByKey("testMsg");
//执行工作流
mService.executeJob(mService.createJobQuery().singleResult().getId());

//查询异常信息
String msg = mService.getTimerJobExceptionStacktrace(mService.createTimerJobQuery().singleResult().getId());

    2.3 转移与删除工作

//启动流程
runtimeService.startProcessInstanceByKey("moveJob1");
//管理服务组件
RuntimeService mService = engine.getManagementService();

//查询一般工作数量
mService.createJobQuery().count();
//查询deadletter数量
mService.createDeadLetterJobQuery().count();
//将deadletter移动到一般工作表
mService.moveDeadLetterJobExecutableJob(mService.createDeadLetterJobQuery().singleResult.getId(),2);
//删除工作
mService.deleteJob(mService.createJobQuery().singleResult().getId());
//将定时器工作移动到一般工作表
mService.moveTimerToExecutableJob(mService.createTimerJobQuery().singleResult().getId());

3 数据库管理

    3.1 查询引擎属性

activiti会将流程引擎相关的属性配置保存到ACT_GE_PROPERTY表中,一些全局的,可能发生改变的属性均会被存放到该表中保存.使用ManagementService的getProperties方法可以返回这些属性及值

// 得到管理服务组件
ManagementService mService = engine.getManagementService();
Map<String,String> props = managementService.getProperties();

    3.2 数据表信息查询

//得到管理服务组件
ManagementService managementService = engine.getManagementService();
//查询表信息
TableMetaData data = managementService.getTableMetaData("ACT_GE_PROPERTY");
Listy<String> columns = data.getColumnNames();
List<String> types = data.getColumnTypes();
//查询数据量
Map<String,Long> count = managementService.getTableCount();

    3.3 数据库操作

//得到管理服务组件
ManagementService managementService = engine.getManagementService();
//创建数据库连接
String url = "jdbc:mysql://localhost:3306/act";
String username = "root";
String passwd = "123456";
Connection conn = DriverManager.getConnection(url,username,passwd);
//创建schema
conn.createStatement().execute("create database 10_TEST");
managementService.databaseSchemaUpgrade(conn,"","");

//删除schema
conn = DriverManager.getConnection(url,userName,passwd);
//创建schema
conn.createStatement().execute("create database 10_test");
managementService.databaseSchemaUpgrade(conn,"","");

//删除schema
conn = DriverManager.getConnection(url,username,passwd);
conn.createStatement().execute("drop database 10_test");
managementService.databaseSchemaUpgrade(conn,"","");
// 为10数据库创建table1表
conn = DriverManager.getConnection(url,userName,passwd);
conn.createStatement().execute("create table table_1(`ID` int(11) NOT NULL auto_increment,primary key(`ID`))");

managementService.databaseSchemaUpgrade(conn,"","");
//删除10的table_1表
conn = DriverManager.getConnection(url1,userName,passwd);
conn.createStatement().execute("drop table Table_1");
managementService.databaseSchemaUpgrade(conn,"","");

    3.4 数据表查询

//查询ACT_GE_PROPERTY表的数据
TablePage page = manangementService.createTablePageQuery().tableName("ACT_GE_PROPERTY").listPage(0,2);
List<Map<String,Object> datas = page.getRows();
for(Map<String,Object> data : datas){
	for(String key : data.keySet()){
		System.out.println(key+"---------"+data.get(key));
	}
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值