1、部署流程定义

  部署流程定义也可以认为是增加流程定义。

   首先创建流程引擎对象(公用的方法)

private ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
方法1:
  /*** 1.发布流程* 会在三张表中产生数据:* act_ge_bytearray 产生两条数据* act_re_deployment 产生一条数据* act_re_procdef 产生一条数据*/public void deploy() throws Exception {// 获取仓库服务RepositoryService repositoryService = processEngine.getRepositoryService();// 创建发布配置对象DeploymentBuilder builder = repositoryService.createDeployment();// 设置发布信息
  builder.name("请假流程")// 添加部署规则的显示别名.addClasspathResource("diagrams/Leave2.bpmn")// 添加规则文件.addClasspathResource("diagrams/Leave2.png");// 添加规则图片  不添加会自动产生一个图片不推荐// 完成发布
  builder.deploy();}

  方法2:

 public void deployZIP() throws Exception {// 获取仓库服务RepositoryService repositoryService = processEngine.getRepositoryService();// 创建发布配置对象DeploymentBuilder builder = repositoryService.createDeployment();// 获得上传文件的输入流程InputStream in = this.getClass().getClassLoader().getResourceAsStream("diagrams/diagrams.zip");ZipInputStream zipInputStream = new ZipInputStream(in);// 设置发布信息
  builder.name("请假流程")// 添加部署规则的显示别名
  .addZipInputStream(zipInputStream );// 完成发布
  builder.deploy();}

说明:

  1)     首先获得默认的流程引擎,在创建时会自动加载classpath下得activiti.cfg.xml

  2)     通过流程引擎获取了一个RepositoryService对象->仓库服务对象

  3)     由仓库的服务对象产生一个部署对象配置对象,用来封装部署环境的相关配置。

  4)     这是一个链式编程,在部署配置对象中设置显示名,上传规则文件相对classpath的地址。

  5)     部署,也是往数据库中存储流程定义的过程。

  6)     这一步在数据库中将操作三张表:

    a)     act_re_deployment

     存放流程定义的显示名和部署时间,每部署一次增加一条记录

    b)     act_re_procdef

     存放流程定义的属性信息,部署每个新的流程定义都会在这张表中增加一条记录。

    c)     act_ge_bytearray

     存储流程定义相关的部署信息。即流程定义文档的存放地。每部署一次就会增加两条记录,一条是关于bpmn规则文件的,一条是图片的(如果部署时只指定了bpmn一个文件,activiti会在部署时解析bpmn文件内容自动生成流程图)。两个文件不是很大,都是以二进制形式存储在数据库中。

2、删除流程

  删除部署到activiti中的流程定义。

 public void delDeployment() throws Exception {// 获取仓库服务对象RepositoryService repositoryService = processEngine.getRepositoryService();// 删除发布信息String deploymentId = "1";// 普通删除,如果当前规则下有正在执行的流程,则抛异常
  repositoryService.deleteDeployment(deploymentId);// 级联删除,会删除和当前规则相关的所有信息,包括历史repositoryService.deleteDeployment(deploymentId, true);}

说明:

  1)     因为删除的是流程定义,而流程定义的部署是属于仓库服务的,所以应该先得到RepositoryService

  2)     如果该流程定义下没有正在运行的流程,则可以用普通删除。如果是有关联的信息,用级联删除。一般情况下用普通删除就可以。由于级联删除涉及的数据比较多,一般只开放给超级管理员使用。

3、查看流程定义

 /*** 查看流程定义* 流程定义 ProcessDefinition* id : {key}:{version}:{随机值}* name : 对应流程文件process节点的name属性* key : 对应流程文件process节点的id属性* version : 发布时自动生成的。如果是第一发布的流程,veresion默认从1开始;如果当前流程引擎中已存在相同key的流程,则找到当前key对应的最高版本号,在最高版本号上加1*/public void queryProcessDefinition() throws Exception {// 获取仓库服务对象RepositoryService repositoryService = processEngine.getRepositoryService();// 获取流程定义查询对象ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery();// 配置查询对象
  processDefinitionQuery//添加过滤条件
//     .processDefinitionName(processDefinitionName)
//     .processDefinitionId(processDefinitionId)
//     .processDefinitionKey(processDefinitionKey)//分页条件
//     .listPage(firstResult, maxResults)//排序条件
     .orderByProcessDefinitionVersion().desc();/*** 执行查询* list : 执行后返回一个集合* singelResult 执行后,首先检测结果长度是否为1,如果为一则返回第一条数据;如果不唯一,抛出异常* count: 统计符合条件的结果数量*/List<ProcessDefinition> pds = processDefinitionQuery.list();// 遍历集合,查看内容for (ProcessDefinition pd : pds) {System.out.print("id:" + pd.getId() +",");System.out.print("name:" + pd.getName() +",");System.out.print("key:" + pd.getKey() +",");System.out.println("version:" + pd.getVersion());}}

说明:

  1)     因为流程定义的信息存放在仓库中,所以应该获取RepositoryService。

  2)     创建流程定义查询对象,可以在ProcessDefinitionQuery上设置查询过滤参数

  3)     调用ProcessDefinitionQuery对象的list方法,执行查询,获得符合条件的流程定义列表

  4)     由运行结果可以看出:

    a)     Key和Name的值为:bpmn文件process节点的id和name的属性值

    b)     key属性被用来区别不同的流程定义。

    c)     带有特定key的流程定义第一次部署时,version为1。之后每次部署都会在当前最高版本号上加1

    d)     Id的值的生成规则为:{processDefinitionKey}:{processDefinitionVersion}:{generated-id}, 这里的generated-id是一个自动生成的唯一的数字

    e)     重复部署一次,deploymentId的值以一定的形式变化

    f)      流程定义(ProcessDefinition)在数据库中没有相应的表对应,只是从act_ge_bytearray表中取出相应的bpmn和png图片,并进行解析。

转载于:https://www.cnblogs.com/cxyj/p/3877181.html

Activiti流程定义部署、删除相关推荐

  1. Activiti流程定义删除

    在开发中肯定会有一些流程不需要了,要删除,Activiti中也是存在删除操作的, 通过流程定义部署ID来执行删除流程定义. 不说那么多直接上代码: /*** 删除流程定义*/@Testpublic v ...

  2. Spring中部署Activiti流程定义的三种姿势

    摘要:本文对工作流Activiti框架中流程定义的部署进行了详细说明介绍. 本文分享自华为云社区<项目中工作流部署详细解析!Spring中部署Activiti流程定义的三种姿势>,作者:攻 ...

  3. activiti流程定义的部署

    import org.activiti.engine.ProcessEngine; import org.activiti.engine.ProcessEngines; import org.acti ...

  4. camunda工作流引擎流程定义部署 流程定义查询 激活流程实例

    camunda工作流引擎流程定义部署 流程定义查询 激活流程实例 1.通过xml字符串部署流程定义 /*** 通过xml字符串部署流程定义* @param processModelVo* @retur ...

  5. Activiti流程定义缓存源码分析5-流程缓存

    谈起节点缓存,可能读者有个疑问,缓存节点的意义何在,哪些节点支持缓存呢?需要在哪里配置节点缓存值呢?节点缓存的数据格式又是什么呢?首先我们有一种常见的应用场景,比如我们定义流程文档的时候,通常任务节点 ...

  6. activiti学习(二)——activiti流程的部署

    进行了流程引擎的构建和初始化之后,接下来要做的就是把写好的流程文档部署到流程引擎中,后续activiti.cfg.xml的配置如果没有特指的话,一般就用第一章提供的例子. 首先画一个bpmn的图,可以 ...

  7. Activiti流程定义缓存源码分析7-流程缓存自定义

    接下来,重点看一下Activiti中如何自定义流程缓存. 上面我们提到过自定义类首先需要继承StandaloneProcessEngineConfiguration类并通过动态属性注入方式为引擎配置类 ...

  8. Activiti流程定义缓存源码分析8-流程缓存自定义原理

    上面我们浓墨重彩地讲述了自定义节点缓存类以及将其注入流程引擎配置类实例的过程,可能读者有个疑问?节点定义的缓存数据格式是什么呢?流程引擎执行节点的时候,又是如何获取并解析节点所缓存的数据呢?这也是接下 ...

  9. activiti 流程定义和流程实例的挂起

    关于流程定义和流程实例的挂起,activiti的官方文档描述比较详细,摘录如下: Suspending and activating a process It's possible to suspen ...

  10. 工作流实战_06_flowable 流程定义的删除

    List item 由于群里有些朋友对这个flowable还不是 很熟悉,在群里的小伙伴的建议下,我师傅(小学生05101)制作一个开源的项目源码,一共大家学习和交流,希望对有帮助,少走弯路 如果有不 ...

最新文章

  1. shell获取时间戳
  2. spring_Spring Boot登录选项快速指南
  3. python零基础怎么学-Python怎么学?零基础如何顺利入门Python?
  4. whitepages 被关闭_除了滑动关闭APP影响电池寿命,还有哪些操作触碰到了你的知识盲区?...
  5. VB.NET实现DirectDraw9 (1) 托管的DDraw
  6. el-popover可以设高度_家用餐厅吧台桌高度一般多少?吧台设计需要注意哪些?...
  7. 5部适合学英语的动画电影,快和孩子一起看!
  8. 当执行游戏0xc000007b错误的解决方法
  9. Python《使用Selenium 和pyautogui 实现自动登录淘宝》
  10. HDU1160 FatMouse's Speed —— DP
  11. ACL2021奇葩标题大赏
  12. iview 省市区 三级联动
  13. 企业网站建设要点和推广方法有哪些?
  14. 隐匿在数据结构背后的原理
  15. word插入分隔符的方法
  16. python-基站位置查询
  17. VS2019下编译与配置GSL2.7【Release x64版】
  18. 加拿大留学有何魅力,可以吸引众留学生蜂拥而至
  19. plsql/developer12如何放大字体
  20. 牛顿法和割线法方程求根(C语言)

热门文章

  1. 面向对象之Python的链表实现(二)循环链表
  2. 【论文阅读】医疗影像分割中的半监督学习Semi-supervised
  3. Flutter高级第5篇:官方推荐的状态管理库 provider 的使用
  4. Eclipse中如何让Java类与Servlet产生关联【实现处理请求内容】
  5. Jedis 常用API使用
  6. Spring mybatis源码学习指引目录
  7. Winform/WPF国际化处理
  8. 卖两本windows phone的书
  9. 《跟我一起做J2EE版Blog–jPress》6(Spring集成Struts2,打通第一个Action)
  10. Scapy 函数传值问题,解决多层数据获取