java开发Activiti进阶篇流程实例详解

 更新时间:2022年08月11日 08:52:53   作者:请叫我黄同学  
这篇文章主要为大家介绍了java开发Activiti进阶篇流程实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

1.流程实例

1.1 什么是流程实例

流程实例(ProcessInstance)代表流程定义的执行实例

一个流程实例包括了所有的运行节点,我们可以利用这个对象来了解当前流程实例的进度等信息

例如:用户或者程序安装流程定义的内容发起了一个流程,这个就是一个流程实例

1.2 业务管理

​流程定义部署在Activiti后,我们就可以在系统中通过Activiti去管理流程的执行,但是如果我们要将我们的流程实例和业务数据关联,这时我们需要使用到Activiti中预留的BusinessKey(业务标识)来关联

实现代码:

    /**
     * 启动流程实例,添加businessKey
     */
    @Test
    public void test01(){
        // 1.获取ProcessEngine对象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        // 2.获取RuntimeService对象
        RuntimeService runtimeService = processEngine.getRuntimeService();
        // 3.启动流程实例
        ProcessInstance instance = runtimeService
                .startProcessInstanceByKey("evection", "1001");
        // 4.输出processInstance相关属性
        System.out.println("businessKey = "+instance.getBusinessKey());
    }

1.3 流程实例的挂起和激活

​ 在实际场景中可能由于流程变更需要将当前运行的流程暂停而不是删除,流程暂停后将不能继续执行。

1.3.1 全部流程挂起

​ 操作流程的定义为挂起状态,该流程定义下边所有的流程实例全部暂停。

流程定义为挂起状态,该流程定义将不允许启动新的流程实例,同时该流程定义下的所有的流程实例都将全部挂起暂停执行。

    /**
     * 全部流程挂起实例与激活
     */
    @Test
    public void test02(){
       // 1.获取ProcessEngine对象
        ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
        // 2.获取RepositoryService对象
        RepositoryService repositoryService = engine.getRepositoryService();
        // 3.查询流程定义的对象
        ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
                .processDefinitionKey("evection")
                .singleResult();
        // 4.获取当前流程定义的状态
        boolean suspended = processDefinition.isSuspended();
        String id = processDefinition.getId();
        // 5.如果挂起就激活,如果激活就挂起
        if(suspended){
            // 表示当前定义的流程状态是 挂起的
            repositoryService.activateProcessDefinitionById(
                    id // 流程定义的id
            ,true // 是否激活
            ,null // 激活时间
            );
            System.out.println("流程定义:" + id + ",已激活");
        }else{
            // 非挂起状态,激活状态 那么需要挂起流程定义
            repositoryService.suspendProcessDefinitionById(
                    id // 流程id
                    ,true // 是否挂起
                    ,null // 挂起时间
            );
            System.out.println("流程定义:" + id + ",已挂起");
        }
    }

挂起流程定义后,对于的实例对象中的状态会修改为2

然后再去操作对于的流程实例会抛异常信息

我们再将挂起的流程转变为激活状态,对于的状态值会从2更新为1

然后就是业务流程可以正常处理了

1.3.2 单个实例挂起

操作流程实例对象,针对单个流程执行挂起操作,某个流程实例挂起则此流程不再继续执行,当前流程定义的其他流程实例是不受干扰的。完成该流程实例的当前任务会抛异常

    /**
     * 单个流程实例挂起与激活
     */
    @Test
    public void test03(){
        // 1.获取ProcessEngine对象
        ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
        // 2.获取RuntimeService
        RuntimeService runtimeService = engine.getRuntimeService();
        // 3.获取流程实例对象
        ProcessInstance processInstance = runtimeService.createProcessInstanceQuery()
                .processInstanceId("25001")
                .singleResult();
        // 4.获取相关的状态操作
        boolean suspended = processInstance.isSuspended();
        String id = processInstance.getId();
        if(suspended){
            // 挂起--》激活
            runtimeService.activateProcessInstanceById(id);
            System.out.println("流程定义:" + id + ",已激活");
        }else{
            // 激活--》挂起
            runtimeService.suspendProcessInstanceById(id);
            System.out.println("流程定义:" + id + ",已挂起");
        }
    }

然后我们可以在数据库中查看到状态的更新

以上就是java开发Activiti进阶篇流程实例详解的详细内容,更多关于java Activiti流程实例的资料请关注脚本之家其它相关文章!

相关文章

  • 在IDEA中安装scala、maven、hadoop遇到的问题小结

    在IDEA中安装scala、maven、hadoop遇到的问题小结

    这篇文章主要介绍了在IDEA中安装scala、maven、hadoop遇到的问题小结,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • sql于navicat中能运行在mybatis中不能运行的解决方案

    sql于navicat中能运行在mybatis中不能运行的解决方案

    这篇文章主要介绍了sql于navicat中能运行在mybatis中不能运行的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • Event Sourcing事件溯源模式优化业务系统

    Event Sourcing事件溯源模式优化业务系统

    这篇文章主要为大家介绍了Event Sourcing事件溯源模式优化业务系统示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • Java编程一个随机数产生模块代码分享

    Java编程一个随机数产生模块代码分享

    这篇文章主要介绍了Java编程一个随机数产生模块代码分享,具有一定借鉴价值,需要的朋友可以参考下。
    2017-12-12
  • SpringBoot将多个文件夹进行压缩的两种方法(浏览器下载和另存为)

    SpringBoot将多个文件夹进行压缩的两种方法(浏览器下载和另存为)

    Spring Boot项目通常不会自动对文件夹进行压缩,不过,在打包应用时,如果你使用了Maven或Gradle这样的构建工具,并且配置了相应的插件,可以在打成jar或war包的时候将依赖的库文件合并并压缩,本文介绍了SpringBoot将多个文件夹进行压缩的两种方法
    2024-07-07
  • 基于IO版的用户登录注册实例(Java)

    基于IO版的用户登录注册实例(Java)

    下面小编就为大家带来一篇基于IO版的用户登录注册实例(Java)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • 浅析Java中静态代理和动态代理的应用与区别

    浅析Java中静态代理和动态代理的应用与区别

    代理模式在我们生活中很常见,而Java中常用的两个的代理模式就是动态代理与静态代理,这篇文章主要为大家介绍了二者的应用与区别,需要的可以参考下
    2023-08-08
  • java高并发之线程组详解

    java高并发之线程组详解

    这篇文章主要介绍了java高并发之线程组,Java提供了ThreadGroup类来控制一个线程组,一个线程组可以通过线程对象来创建,也可以由其他线程组来创建,生成一个树形结构的线程,需要的朋友可以参考下
    2021-10-10
  • SpringBoot 中使用RabbtiMq 详解

    SpringBoot 中使用RabbtiMq 详解

    这篇文章主要介绍了SpringBoot 中使用RabbtiMq详解,文章围绕主题展开详细的内容介绍,具有一定的参考价价值,需要的朋友可以参考一下
    2022-07-07
  • java并发无锁多线程单线程示例详解

    java并发无锁多线程单线程示例详解

    这篇文章主要为大家介绍了java并发无锁多线程单线程示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07

最新评论