美文网首页
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