美文网首页
Activiti流程引擎及服务6-管理服务ManagementS

Activiti流程引擎及服务6-管理服务ManagementS

作者: 安安汐而 | 来源:发表于2019-08-23 08:40 被阅读0次

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>

相关文章

网友评论

      本文标题:Activiti流程引擎及服务6-管理服务ManagementS

      本文链接:https://www.haomeiwen.com/subject/ruaasctx.html