• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

关于java:Flowable实战三流程部署管理

java 搞代码 3年前 (2022-01-27) 68次浏览 已收录 0个评论
文章目录[隐藏]

一、流程定义的版本

  当部署流程定义时,数据库中的流程定义会是这个样子:

id key name version
myProcess:1:676 myProcess My important process 1

  如果咱们当初部署同一个流程的更新版本(例如批改局部用户工作),且放弃流程定义的id不变,那么流程定义表中会蕴含上面的记录:

id key name version
myProcess:1:676 myProcess My important process 1
myProcess:2:870 myProcess My important process 2

  当调用执行流程时,会应用版本2的流程定义,因为这是这个流程定义的最新版本。

二、流程部署形式

2.1 指定我的项目内资源文件部署

  比方在resources/下新建资源文件single-task.bpmn20.xml

<code class="xml"><?xml version="1.0" encoding="UTF-8"?>
<definitions
        xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
        xmlns:flowable="http://flowable.org/bpmn"
        targetNamespace="Examples">

    <process id="singleTask" name="The One Task Process">
        <startEvent id="theStart" />
        <sequenceFlow id="flow1" sourceRef="theStart" targetRef="theTask" />
        <userTask id="theTask" name="my task" flowable:assignee="zhangsan" />
        <sequenceFlow id="flow2" sourceRef="theTask" targetRef="theEnd" />
        <endEvent id="theEnd" />
    </process>

</definitions>

  部署示例代码:

<code class="java"> // 资源门路
String path = "single-task.bpmn20.xml";
// 创立部署构建器
DeploymentBuilder deploymentBuilder = repositoryService.createDeployment();
// 增加资源
deploymentBuilder.addClasspathResource(path);
// 执行部署
deploymentBuilder.deploy();
// 验证部署
long count = repositoryService.createProcessDefinitionQuery().processDefinitionKey("singleTask").count();
// count等于1,则阐明部署胜利

  只有是在我的项目class目录下的资源,都能够用这种形式部署。

  这种形式个别用于开发测试阶段,真正的生产环境,是通过与web治理页面交互部署。

2.2 springboot主动部署

  在springboot环境下,resources/processes目录下的任何BPMN 2.0流程定义都会被主动部署。

2.3 接口方式

  理论生产中,咱们须要接管前端传回来的流程定义数据,而后更新部署。

  上面咱们省去前端拜访接口参数的展现,仅演示后端解决代码。

<code class="java">// 从前端接管到的XML字符串
// 此处省去xml具体内容,可参考2.1的single-task.bpmn20.xml示例
// 留神将id定义为singleTask2,以便跟2.1的内容作出区别
String text = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><definitions...</definitions>";
// 创立部署构建器
DeploymentBuilder deploymentBuilder = repositoryService.createDeployment();
// 执行部署
deploymentBuilder.addString("single-task2.bpmn20.xml", text).deploy();
// 验证部署
long count = repositoryService.createProcessDefinitionQuery().processDefinitionKey("singleTask2").count();
// count等于1,则阐明部署胜利

2.4 zip压缩包

  当咱们须要一次同时部署多个资源时,能够通过zip压缩包的部署形式。

<code class="java">String fileName = "path/multi-task.zip";
ZipInputStream inputStream = new ZipInputStream(new FileInputStream(fileName));

repositoryService.createDeployment()
    .name("multi-task.zip")
    .addZipInputStream(inputStream)
    .deploy();

补充:流程定义文件,须要由流程设计器生成。整合流程设计器,可参考:https://www.gaodaima.com/JinYJ20…

三、流程治理

  业务零碎的第一步,就是须要一个列表能够浏览和治理流程定义。

3.1 获取已部署流程列表

<code class="java">@Autowired
private RepositoryService repositoryService;

public List getDeployList() {
    List<ProcessDefinition> list = repositoryService.createProcessDefinitionQuery().list();
    return list;
}

3.2 读取流程图片

  显然,治理页面须要显示流程图片的性能。

  Flowable引擎会在流程部署时,主动生成流程图片。

  获取流程图片办法:

<code class="java">ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
  .processDefinitionKey("singleTask")
  .singleResult();

String diagramResourceName = processDefinition.getDiagramResourceName();
InputStream imageStream = repositoryService.getResourceAsStream(
    processDefinition.getDeploymentId(), diagramResourceName);

留神:如果不须要或不心愿在部署时生成流程图,能够在流程引擎配置中设置isCreateDiagramOnDeploy参数:

<property name="createDiagramOnDeploy" value="false" />

3.3 读取流程定义的XML

  治理界面可减少“显示流程定义代码”性能,即读取显示流程定义的XML内容。

<code class="JAVA">// 依据processDefinitionId查问
ProcessDefinition pd = repositoryService.createProcessDefinitionQuery().processDefinitionId(processDefinitionId).singleResult();
// 读取资源流,resourceName为前端传回的资源名称
InputStream stream = repositoryService.getResourceAsStream(pd.getDeploymentId(), resourceName);
//读取到的资源流再返回到前端

3.4 删除部署

  一个流程定义不是通过流程定义ID删除,而是通过流程定义的部署ID删除。在执行删除时,会将和本次部署无关的资源一起删除。

<code class="java">repositoryService.deleteDeployment(deploymentId, true);

四、小结

  本篇介绍了流程定义的版本、部署及治理的应用办法。当然,在理论利用中,还有很多细节须要优化,比方流程定义部署时的去重,分页获取流程列表等等。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:关于java:Flowable实战三流程部署管理

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址