您好,登錄后才能下訂單哦!
小編今天帶大家了解flowable工作流引擎遷移API實(shí)例分析,文中知識(shí)點(diǎn)介紹的非常詳細(xì)。覺(jué)得有幫助的朋友可以跟著小編一起瀏覽文章的內(nèi)容,希望能夠幫助更多想解決這個(gè)問(wèn)題的朋友找到問(wèn)題的答案,下面跟著小編一起深入學(xué)習(xí)“flowable工作流引擎遷移API實(shí)例分析”的知識(shí)吧。
流程遷移API服務(wù)類可以通過(guò)流程引擎類進(jìn)行獲取,如下所示:
processMigrationService = processEngine.getProcessMigrationService();
注意:只有Flowable6.5以及以上的版本才可以使用該功能。
通過(guò)processMigrationService可以使用如下的API:
ProcessInstanceMigrationBuilder createProcessInstanceMigrationBuilder(); ProcessInstanceMigrationBuilder createProcessInstanceMigrationBuilderFromProcessInstanceMigrationDocument(ProcessInstanceMigrationDocument document); ProcessInstanceMigrationValidationResult validateMigrationForProcessInstance(String processInstanceId, ProcessInstanceMigrationDocument processInstanceMigrationDocument); ProcessInstanceMigrationValidationResult validateMigrationForProcessInstancesOfProcessDefinition(String processDefinitionId, ProcessInstanceMigrationDocument processInstanceMigrationDocument); ProcessInstanceMigrationValidationResult validateMigrationForProcessInstancesOfProcessDefinition(String processDefinitionKey, int processDefinitionVersion, String processDefinitionTenantId, ProcessInstanceMigrationDocument processInstanceMigrationDocument); void migrateProcessInstance(String processInstanceId, ProcessInstanceMigrationDocument processInstanceMigrationDocument); void migrateProcessInstancesOfProcessDefinition(String processDefinitionId, ProcessInstanceMigrationDocument processInstanceMigrationDocument); void migrateProcessInstancesOfProcessDefinition(String processDefinitionKey, int processDefinitionVersion, String processDefinitionTenantId, ProcessInstanceMigrationDocument processInstanceMigrationDocument); Batch batchMigrateProcessInstancesOfProcessDefinition(String processDefinitionId, ProcessInstanceMigrationDocument processInstanceMigrationDocument); Batch batchMigrateProcessInstancesOfProcessDefinition(String processDefinitionKey, int processDefinitionVersion, String processDefinitionTenantId, ProcessInstanceMigrationDocument processInstanceMigrationDocument); ProcessInstanceBatchMigrationResult getResultsOfBatchProcessInstanceMigration(String migrationBatchId);
上述的一系列API可以歸納為如下幾種:
創(chuàng)建遷移計(jì)劃(ProcessInstanceMigrationBuilder),該實(shí)例對(duì)象中可以設(shè)置一系列的遷移邏輯,比如將那個(gè)版本下面的實(shí)例遷移到特定版本的模板中
validateXX驗(yàn)證是否可以執(zhí)行遷移邏輯。
migrateProcessInstance開(kāi)頭的方法,同步執(zhí)行遷移計(jì)劃,調(diào)用該API之后,引擎立即開(kāi)始執(zhí)行遷移工作。
batchMigrateXX開(kāi)頭的,批處理遷移實(shí)例。當(dāng)需要遷移非常多實(shí)例的時(shí)候,可以使用批處理進(jìn)行操作。該操作需要開(kāi)啟定時(shí)器,否則不生效。
getResultsOfBatchProcessInstanceMigration:獲取批處理的執(zhí)行結(jié)果。
接下來(lái),以兩個(gè)版本的流程為例對(duì)流程實(shí)例遷移功能展開(kāi)說(shuō)明:
版本1的流程圖:
<process id="a2" name="2" isExecutable="true"> <documentation>2</documentation> <startEvent id="startEvent1" flowable:formFieldValidation="true"></startEvent> <userTask id="sid-A8596132-C632-4DB0-81D6-5603D6516F3C" name="1" flowable:formFieldValidation="true"></userTask> <sequenceFlow id="sid-980E4499-6E2A-480E-B7F9-E8FD07914D49" sourceRef="startEvent1" targetRef="sid-A8596132-C632-4DB0-81D6-5603D6516F3C"></sequenceFlow> <endEvent id="sid-9203A5B1-FED5-429A-8039-0089AE3132A8"></endEvent>
版本2的流程:
<startEvent id="startEvent1" flowable:formFieldValidation="true"></startEvent> <userTask id="sid-A8596132-C632-4DB0-81D6-5603D6516F3C" name="1" flowable:formFieldValidation="true"></userTask> <sequenceFlow id="sid-980E4499-6E2A-480E-B7F9-E8FD07914D49" sourceRef="startEvent1" targetRef="sid-A8596132-C632-4DB0-81D6-5603D6516F3C"></sequenceFlow> <userTask id="sid-84BBB613-FB20-430B-B4C1-E60F4DA02CFB" name="2" flowable:formFieldValidation="true"></userTask> <sequenceFlow id="sid-89B1A448-65D7-4222-B666-541DAB61BC01" sourceRef="sid-A8596132-C632-4DB0-81D6-5603D6516F3C" targetRef="sid-84BBB613-FB20-430B-B4C1-E60F4DA02CFB"></sequenceFlow> <endEvent id="sid-3101266D-CB58-4A8B-A3B1-B880F3C1D936"></endEvent>
版本2的流程比版本1的流程多了一個(gè)任務(wù)節(jié)點(diǎn),其他的元素均一樣。
演示視頻可以參考視頻:
操作如下:
/** * 1 */ @Test public void deploy(){ ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); System.out.println(processEngine); RepositoryService repositoryService = processEngine.getRepositoryService(); //taskWithEventProcess.bpmn20.xml repositoryService .createDeployment() .addClasspathResource("processMigrationService/2.1.bpmn20.xml") .deploy(); runtimeService.startProcessInstanceByKey("a2"); }
上述代碼中部署流程之后,立即啟動(dòng)了新的實(shí)例。目前實(shí)例位于1節(jié)點(diǎn)。
接下來(lái)開(kāi)始部署2流程,并實(shí)現(xiàn)將1節(jié)點(diǎn)遷移到版本為2的2節(jié)點(diǎn)中。代碼如下:
@Test public void batchMigrateProcessInstancesOfProcessDefinition2(){ String processDefinitionKey="a2"; int processDefinitionVersion=1; String processDefinitionTenantId=""; ProcessInstanceMigrationDocumentImpl processInstanceMigrationDocument =new ProcessInstanceMigrationDocumentImpl(); processInstanceMigrationDocument.setMigrateToProcessDefinition(processDefinitionKey,2); List<ActivityMigrationMapping> activityMigrationMappings = new ArrayList<ActivityMigrationMapping>(); ActivityMigrationMapping.OneToOneMapping mappingFor = ActivityMigrationMapping.createMappingFor("sid-A8596132-C632-4DB0-81D6-5603D6516F3C", "sid-84BBB613-FB20-430B-B4C1-E60F4DA02CFB"); activityMigrationMappings.add(mappingFor); processInstanceMigrationDocument.setActivityMigrationMappings(activityMigrationMappings); processMigrationService .migrateProcessInstance("12505",processInstanceMigrationDocument); }
Flowable 流程實(shí)例遷移功能相比與Camunda而言,功能更加的薄弱和單一??赡苡行┕δ芨虡I(yè)版有關(guān)系,因此開(kāi)源出來(lái)的功能比較單一。沒(méi)有Camunda那么強(qiáng)大。
Flowable 流程實(shí)例遷移功能對(duì)于查詢做的還不夠完善,沒(méi)有大量的查詢邏輯,不方便用戶根據(jù)特定場(chǎng)景進(jìn)行操作。
對(duì)于批處理模塊,沒(méi)有Camunda強(qiáng)大,因次Flowable開(kāi)源版本僅支持實(shí)例的批量遷移,而不支持其他的批處理操作。
Flowable開(kāi)源版本批量遷移實(shí)例之后,原有的歷史數(shù)據(jù)會(huì)被刪除掉,Camunda不會(huì)刪除歷史數(shù)據(jù)。因此在Flowable中使用該功能的時(shí)候一定要小心,防止歷史數(shù)據(jù)被清除掉。整個(gè)完整實(shí)例樹痕跡不會(huì)保留。
Flowable開(kāi)源版本可以進(jìn)行任意數(shù)據(jù)的遷移,Camunda會(huì)對(duì)遷移的源節(jié)點(diǎn)和目標(biāo)節(jié)點(diǎn)進(jìn)行對(duì)比,如果不在一個(gè)區(qū)間就不讓遷移。Flowable控制的不嚴(yán)格。
Camunda支持在遷移的過(guò)程中去設(shè)置異步或者同步執(zhí)行,F(xiàn)lowable不支持。
Camunda支持在遷移的過(guò)程中去設(shè)置是否刪除原有實(shí)例數(shù)據(jù)信息,F(xiàn)lowable不支持。
Camunda支持在遷移的過(guò)程中去設(shè)置是否可以觸發(fā)節(jié)點(diǎn)監(jiān)聽(tīng)器邏輯,F(xiàn)lowable不支持。
均支持開(kāi)發(fā)人員設(shè)置批量處理任務(wù)的閾值和速率。
感謝大家的閱讀,以上就是“flowable工作流引擎遷移API實(shí)例分析”的全部?jī)?nèi)容了,學(xué)會(huì)的朋友趕緊操作起來(lái)吧。相信億速云小編一定會(huì)給大家?guī)?lái)更優(yōu)質(zhì)的文章。謝謝大家對(duì)億速云網(wǎng)站的支持!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。