Demo项目代码:
https://gitee.com/AnAnXiEr/activiti6-demo
job任务管理
数据库相关通用操作
执行流程引擎命令
job任务查询
- jobQuery:查询一般工作
- TimerJobQuery:查询定时任务
- SuspendedJobQuery:查询中断工作
- DeadLetterJobQuery:查询无法执行的工作
数据库相关通用操作
- 查询表结构元数据(TableMetaData)
- 执行自定义的Sql查询(executeCustomSql)
代码
ManagementServiceTest
package com.imooc.activiti.activitidemo.coreapi;
import com.imooc.activiti.activitidemo.mapper.MyCustomMapper;
import org.activiti.engine.ManagementService;
import org.activiti.engine.impl.cmd.AbstractCustomSqlExecution;
import org.activiti.engine.impl.interceptor.Command;
import org.activiti.engine.impl.interceptor.CommandContext;
import org.activiti.engine.impl.persistence.entity.ProcessDefinitionEntity;
import org.activiti.engine.management.TablePage;
import org.activiti.engine.runtime.DeadLetterJobQuery;
import org.activiti.engine.runtime.Job;
import org.activiti.engine.runtime.JobQuery;
import org.activiti.engine.runtime.SuspendedJobQuery;
import org.activiti.engine.test.ActivitiRule;
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;
/**
* @Description ManagementService服务测试
* @Author 胡浩
* @Date 2019/8/22
**/
public class ManagementServiceTest {
private static final Logger LOGGER = LoggerFactory.getLogger(ManagementServiceTest.class);
@Rule
public ActivitiRule activitiRule = new ActivitiRule("coreapi/activiti_job.cfg.xml");
/**
*
*/
@Test
//异步job时,需要在配置文件里配置开启job
@org.activiti.engine.test.Deployment(resources = "coreapi/job-process.bpmn20.xml")
public void testJobService() {
ManagementService managementService = activitiRule.getManagementService();
//timerJob
List<Job> timerJobLists = managementService.createTimerJobQuery().listPage(0, 100);
for (Job timerJob : timerJobLists) {
LOGGER.info("timerJob= {}", timerJob);
}
//普通job
JobQuery jobQuery = managementService.createJobQuery();
//中断的job
SuspendedJobQuery suspendedJobQuery = managementService.createSuspendedJobQuery();
// 查询无法执行的工作
DeadLetterJobQuery deadLetterJobQuery = managementService.createDeadLetterJobQuery();
}
/**
* 通用表查询(TablePageQuery)
*/
@Test
@org.activiti.engine.test.Deployment(resources = "coreapi/job-process.bpmn20.xml")
public void testTalbePageQuery() {
ManagementService managementService = activitiRule.getManagementService();
//查询表名
String tableName = managementService.getTableName(ProcessDefinitionEntity.class);
TablePage tablePage = managementService.createTablePageQuery().tableName(tableName).listPage(0, 100);
LOGGER.info("tablePage = {}", ToStringBuilder.reflectionToString(tablePage, ToStringStyle.JSON_STYLE));
List<Map<String, Object>> rows = tablePage.getRows();
for (Map<String, Object> row : rows) {
LOGGER.info("row = {}", row);
}
}
/**
* 执行自定义的Sql查询(executeCustomSql)
*/
@Test
@org.activiti.engine.test.Deployment(resources = "coreapi/my-process.bpmn20.xml")
public void testExecuteCustomSql() {
activitiRule.getRuntimeService().startProcessInstanceByKey("my-process");
ManagementService managementService = activitiRule.getManagementService();
List<Map<String, Object>> maps = managementService.executeCustomSql(new AbstractCustomSqlExecution<MyCustomMapper, List<Map<String, Object>>>(MyCustomMapper.class) {
@Override
public List<Map<String, Object>> execute(MyCustomMapper myCustomMapper) {
return myCustomMapper.findAll();
}
});
for (Map<String, Object> map : maps) {
LOGGER.info("map = {}", map);
}
}
/**
* 执行command
*/
@Test
@org.activiti.engine.test.Deployment(resources = "coreapi/my-process.bpmn20.xml")
public void testCommand() {
activitiRule.getRuntimeService().startProcessInstanceByKey("my-process");
ManagementService managementService = activitiRule.getManagementService();
ProcessDefinitionEntity processDefinitionEntity = managementService.executeCommand(new Command<ProcessDefinitionEntity>() {
@Override
public ProcessDefinitionEntity execute(CommandContext commandContext) {
ProcessDefinitionEntity latestProcessDefinitionByKey = commandContext.getProcessDefinitionEntityManager()
.findLatestProcessDefinitionByKey("my-process");
return latestProcessDefinitionByKey;
}
});
LOGGER.info("processDefinitionEntity = {}", processDefinitionEntity);
}
}
activiti_job.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 class="org.activiti.engine.impl.cfg.StandaloneInMemProcessEngineConfiguration"
id="processEngineConfiguration">
<property name="commandInvoker" ref="mdcCommandInvoker"/>
<!--打开异步任务job-->
<property name="asyncExecutorActivate" value="true"></property>
<property name="asyncExecutor" ref="asyncExecutor"></property>
<!--配置timer和job事件监听-->
<property name="eventListeners">
<list>
<bean class="com.imooc.activiti.activitidemo.event.JobEventListener"></bean>
</list>
</property>
<!--将map注册进来-->
<property name="customMybatisMappers">
<set>
<value>com.imooc.activiti.activitidemo.mapper.MyCustomMapper</value>
</set>
</property>
</bean>
<bean id="asyncExecutor" class="org.activiti.engine.impl.asyncexecutor.DefaultAsyncJobExecutor">
<property name="executorService" ref="executorService"></property>
</bean>
<bean id="executorService" class="org.springframework.scheduling.concurrent.ThreadPoolExecutorFactoryBean">
<property name="threadNamePrefix" value="activiti-job-"></property>
<property name="corePoolSize" value="5"/>
<property name="maxPoolSize" value="20"/>
<property name="queueCapacity" value="100"/>
<property name="rejectedExecutionHandler">
<bean class="java.util.concurrent.ThreadPoolExecutor$AbortPolicy"></bean>
</property>
</bean>
<bean class="com.imooc.activiti.activitidemo.interceptor.MDCCommandInvoker" id="mdcCommandInvoker"/>
</beans>
job-process.bpmn20.xml
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn"
xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI"
typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath"
targetNamespace="http://www.activiti.org/processdef">
<process id="my-process" name="二级审批流程" isExecutable="true">
<documentation>MDC test process</documentation>
<!--<startEvent id="startEvent" name="开始"/>-->
<startEvent id="startEvent">
<timerEventDefinition>
<timeCycle>R5/PT10S</timeCycle>
</timerEventDefinition>
</startEvent>
<sequenceFlow id="sid-905AF026-9221-4C80-AF9A-29C581E59503" sourceRef="startEvent"
targetRef="tlApprove"/>
<userTask id="tlApprove" name="主管审批"/>
<!--<serviceTask id="tlApprove" activiti:class="com.imooc.activiti.activitidemo.delegage.MDCErrorServiceDelegate"/>-->
<sequenceFlow id="sid-905AF026-9221-4C80-AF9A-29C581E59505" sourceRef="tlApprove"
targetRef="endEventCancel"/>
<endEvent id="endEventCancel" name="取消"/>
</process>
</definitions>
网友评论