zoukankan      html  css  js  c++  java
  • Activiti的进阶

    简介:

      通过加载activiti.cfg.xml文件得到ProcessEngineConfiguration对象,通过ProcessEngineConfiguration对象可以得到ProcessEngine对象

      得到该对象后,可以通过流程引擎对象ProcessEngine来得到各种Service,每一种Service接口有每个用途
        RepositoryService activiti 的资源管理类
        RuntimeService activiti 的流程运行管理类
        TaskService activiti 的任务管理类
        HistoryService activiti 的历史管理类
        ManagerService activiti 的引擎管理类

    ProcessEngineConfiguration流程引擎的配置类

      通过ProcessEngineConfiguration可以创建工作流引擎ProceccEngine;

        StandaloneProcessEngineConfiguration

        通过org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration;

        Activiti可以单独运行,使用它创建的ProcessEngine,Activiti会自己处理事务;

        配置文件方式如下:

          通过在activiti.cfg.xml配置文件中顶一个id为processEngineConfiguration的bean,这里会使用spring的依赖注入来构建引擎;

    <!--配置Activiti使用的processEngine对象   默认命名为processEngineConfiguration-->
        <bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
            <!--注入数据源-->
            <property name="dataSource" ref="dataSource"/>
            <!--配置数据源方式二:-->
            <!--<property name="jdbcDriver" value="com.mysql.jdbc.Driver"/>-->
    
            <!--指定数据库生成策略-->
            <property name="databaseSchemaUpdate" value="true"/>
        </bean>

        SpringProcessEngineConfiguration

        通过org.activiti.spring.SpringProcessEngineConfiguration与spring整合;

        创建spring与activiti的整合配置文件:

        activiti-spring.cfg.xml(名称不固定)

        创建processEngineConfiguration

        public static void main(String[] arrgs){
            //加载配置文件
            ProcessEngineConfiguration configuration = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml");
            //获取对象
            ProcessEngine processEngine = configuration.buildProcessEngine();
        }

    ProcessEngine

      工作流引擎,相当于一个门面接口,通过ProcessEngineConfiguration创建ProcessEngine,通过ProcessEngine创建各个service接口;

        一般创建方式

    //获取对象
    ProcessEngine processEngine = configuration.buildProcessEngine();

        简单创建方式

          将activiti.cfg.xml文件名及路径固定,且activiti.cfg.xml文件中有processEngineConfiguration的配置,可以使用如下代码创建processEngine;

    //获取ProcessEngine
    ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

    service

       service创建方式

        通过ProcessEngine创建service,service是工作流引擎提供用于进行工作部署,执行,管理的服务接口;

        方式如下:

    //获取RepositoryService对象进行流程部署
    RepositoryService repositoryService = processEngine.getRepositoryService();
    //获取RuntimeService对象
    RuntimeService runtimeService = processEngine.getRuntimeService();
    //获取TaskService对象进行流程部署
    TaskService taskService = processEngine.getTaskService();

      service总览

       RepositoryService 

        是activiti的资源管理类,提供了管理和控制流程发布包和流程定义的操作;使用工作流建模工具设计的业务流程图需要使用此service将流程定义文件的内容部署到计算机;

        除了部署流程定义以外还可以:查询引擎中的发布包和流程定义;

        暂停或激活发布包,对应全部和特定流程定义;暂停意味着他们不能再执行任何操作了,激活是对应的反向操作;

        获得多种资源,像是包含在发布包里的文件,或引擎自动生成的流程图;获得流程定义的pojo版本,可以用来通过java解析流程,而不必通过xml;

      RuntimeService

        它是activiti的流程运行管理类;可以从这个服务类中获取很多关于流程执行相关的信息;

      TaskService

        它是activiti的任务管理类,可以从这个类中后去任务的信息

      HistoryService

        它是activiti的历史管理类,可以查询历史信息,执行流程时,引擎会保存很多数据(根据配置),比如流程实例启动时间,任务的参与者,完成任务的时间,每个流程实例的执行路径等等,这个服务主要通过查询功能来获取这些数据;

      ManagementService

        它是activiti的引擎管理类,提供了对activiti流程引擎的管理和维护功能,这些功能不在工作流驱动的应用程序中使用,主要用于activiti系统的日常维护;

    Activiti使用步骤:

      1.流程定义
        使用Activiti Designer工具创建流程图
        新建一个BPMNFile流程图,可更改该流程图的ID和每个任务环节的执行人,流程图就是一个xml文件,每一个流程需要生成一张流程图保存,首先将.bpmn文件改为.xml文件然后右键该xml文件Diagrams--->show BPMN 2.0 Designer就能生成一张流程图,将流程图导出保存到项目对应目录即可,然后将xml改回bpmn即可

      2.流程部署

        部署流程定义就是要将上边绘制的图形即流程定义(.bpmn)部署在工作流引擎activiti中,方法如下:

        使用ProcessEngine创建RepositoryService,代码如下:

    /*流程部署
    * `act_ge_bytearray`    流程定义的资源信息,包含bpmn和png流程文件信息
    * `act_re_deployment`   流程部署信息 包含流程名称,ID,key等
    * `act_re_procdef`      流程定义信息
    * */
    public class ActivitiTest {
        public static void main(String[] args) {
            //获取ProcessEngine
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取RepositoryService对象进行流程部署
            RepositoryService repositoryService = processEngine.getRepositoryService();
            //进行部署,将对应的流程定义文件生成到数据库当中,作为记录进行保存
            Deployment  deployment= repositoryService.createDeployment()
                    .addClasspathResource("bpmnfile/hoilday.bpmn")       //加载流程文件
                    .addClasspathResource("bpmnfile/hoilday.png")
                    .name("请假流程")   //设置流程名称
                    .deploy();//部署
            //输出部署信息
            System.out.println("流程名称:"+deployment.getName());
            System.out.println("流程ID:"+deployment.getId());
            System.out.println("流程key:"+deployment.getKey());
        }
    }

      执行此操作后activiti会将上边代码中执行的bpmn文件和图片文件保存在activiti数据库中;

      3.启动一个流程实例

      流程定义部署在activiti后就可以通过工作流管理业务流程了,也就是说上边部署的请假申请流程可以使用了;

      针对该流程,启动一个流程表示发起一个新的请假申请单,这就相当于java类与java对象的关系,类定义好后需要new创建一个对象使用,当然可以new多个对象;对于请假申请流程,张三发起一个请假申请需要启动一个流程实例,请假申请单发起一个请假单也需要启动一个流程实例;

    /*启动流程实例
    *`act_hi_actinst`           已经开始和执行完毕的活动信息
    *`act_hi_identitylink`      历史参与者信息
    *`act_hi_procinst`          流程实例信息
    *`act_hi_taskinst`          历史任务实例
    *`act_ru_execution`         任务执行信息
    *`act_ru_identitylink`      当前任务执行参与者
     *`act_ru_task`             任务信息
    *
    * */
    public class StartInstance {
        public static void main(String[] args) {
            //获取ProcessEngine
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取RuntimeService对象
            RuntimeService runtimeService = processEngine.getRuntimeService();
            //创建流程实例
            ProcessInstance hoilday = runtimeService.startProcessInstanceByKey("hoilday");
            //输出实例信息
            System.out.println("获取流程部署ID:"+hoilday.getDeploymentId());
            System.out.println("获取流程实例ID:"+hoilday.getId());
            System.out.println("获取流程活动ID:"+hoilday.getActivityId());
        }
    }

      4.任务查询

        流程启动后,各个任务的负责人就可以查看自己当前需要处理的任务,查询出来的任务都是该用户的代办任务;

    /*查看代办任务*/
    public class GetTask {
        public static void main(String[] args) {
            //获取ProcessEngine
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取一个TaskService对象
            TaskService taskService = processEngine.getTaskService();
            //查询代办业务 createTaskQuery查询任务  taskCandidateOrAssigned查询任务执行者    processDefinitionKey执行查看流程
            //查看hoilday流程中zhangsan代办的任务
            //taskCandidateOrAssigned匹配规则: 1.Assigned   2.配置bpmn文件中定义的值
            /*List<Task> list = taskService.createTaskQuery().taskCandidateOrAssigned("zhangsan").processDefinitionKey("hoilday").list();*/
            //taskAssignee查看当前指定人的指定任务
            List<Task> list = taskService.createTaskQuery().taskAssignee("zhangsan").processDefinitionKey("hoilday").list();
            for (Task task:list){
                System.out.println("任务名称:"+task.getName());
                System.out.println("任务执行人:"+task.getAssignee());
                System.out.println("任务ID:"+task.getId());
                System.out.println("流程实例ID:"+task.getProcessInstanceId());
            }
        }
    }

      5.任务处理

        任务负责人查询代办任务,选择任务进行处理,完成任务;

    /*任务处理
    * `act_hi_identitylink`     历史参与者信息
    * `act_hi_taskinst`         历史任务信息
    * `act_ru_execution`        任务执行信息
    * `act_ru_task`             任务信息
    * 当所有任务处理完毕,对应当前流程实例信息删除,但是可以在历史中查看该信息
    * */
    public class CompleteTask {
        public static void main(String[] args) {
            //获取ProcessEngine
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取TaskService对象进行流程部署
            TaskService taskService = processEngine.getTaskService();
            //任务处理
            taskService.complete("15005");
            
        }
    }
  • 相关阅读:
    基于nginx+tomcat部署商城系统并连接数据库
    nginx防DDOS、cc、爬虫攻击
    nginx企业级优化
    基于nginx结合openssl实现https
    nginx打包成rpm
    产品运营3部曲:引量、留存、活跃
    从赢利前和赢利后分析 提高美国市场APP安装量的技巧
    APP海外优质推广渠道(三):海外ASO服务/工具汇总
    APP海外优质推广渠道(二):海外广告联盟/平台汇总
    关于O2O项目的个人看法
  • 原文地址:https://www.cnblogs.com/ws1149939228/p/12615293.html
Copyright © 2011-2022 走看看