日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

工作流学习——Activiti整体认识二步曲

發布時間:2024/4/13 编程问答 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 工作流学习——Activiti整体认识二步曲 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、前言

?

? ? 在上一篇文章中我們將工作流的相關概念、activiti的前世今生、activitijbpm的比較進行學習,這篇文章我們正式進行activiti的學習,activiti的整個學習我們主要通過例子的形式來理解。今天我們主要是準備下activiti的環境,在數據庫中創建activiti默認的23張表以及activiti核心對象ProcessEngine最后是一個activiti的簡單demo

?

?

二、環境準備

?

? ? 相關軟件及版本:

?

? ? jdk版本:Jdk1.8

? ? IDE:eclipse

? ? 數據庫:MySQL

? ? Activiti:5.13

?

? ? eclipse中安裝流程設計器插件:

?

? ? eclipse打開help->install new software,單擊add:?

? ? Name: Activiti BPMN2.0 designer?

? ? Location:http://activiti.org/designer/update/?

進行安裝即可。

?

? ? 引入jar包:

?

? ? ${Activiti_HOME}/install/activiti-5.13/libs(activiti相關包)+mysql對應驅動包(mysql-connector-Java.jar)

?

? ? jar包引入完畢后,我們環境就準備的差不多了,往下我們就該創建我們activiti數據庫默認的表了。

?

三、創建activiti

?

? ? 在activiti中,相對于前身jbpm基礎上又額外多了5張表,所有現在的activiti框架默認提供了23張表。所以第一步我們就來創建這23張表。

?

方法1:使用代碼來創建activiti工作流的表

?

?

[java]?view plain?copy
  • 方法1:使用代碼來創建activiti工作流的表??
  • ??
  • //?使用代碼創建工作流需要的23張表??
  • @Test??
  • public?void?createTable()?{??
  • ????//?工作流引擎的全部配置??
  • ????ProcessEngineConfiguration?processEngineConfiguration?=?ProcessEngineConfiguration??
  • ????????????.createStandaloneProcessEngineConfiguration();??
  • ??
  • ????//?鏈接數據的配置??
  • ????processEngineConfiguration.setJdbcDriver("com.mysql.jdbc.Driver");??
  • ????processEngineConfiguration??
  • ????????????.setJdbcUrl("jdbc:mysql://localhost:3306/activiti1?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=utf8");??
  • ????processEngineConfiguration.setJdbcUsername("root");??
  • ????processEngineConfiguration.setJdbcPassword("123456");??
  • ???
  • ????/*?
  • ?????*?public?static?final?String?DB_SCHEMA_UPDATE_FALSE?=?"false";?
  • ?????*?不能自動創建表,需要表存在?public?static?final?String?DB_SCHEMA_UPDATE_CREATE_DROP?
  • ?????*?=?"create-drop";?先刪除表再創建表?public?static?final?String?
  • ?????*?DB_SCHEMA_UPDATE_TRUE?=?"true";如果表不存在,自動創建表?
  • ?????*/??
  • ????//如果表不存在,自動創建表??
  • ????processEngineConfiguration??
  • ????????????.setDatabaseSchemaUpdate(processEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);??
  • ????//?工作流的核心對象,ProcessEnginee對象??
  • ????ProcessEngine?processEngine?=?processEngineConfiguration??
  • ????????????.buildProcessEngine();??
  • ????System.out.println(processEngine);??
  • ??
  • ??
  • }??

  • ? ? 代碼執行完畢,我們通過navicat查看數據庫會發現,創建了一個新的數據庫activiti1,并且還有23張表。

    ?

    ?

    ?

    方式2:使用配置文件來創建activiti的表

    ?

    ? ? 在類路徑下創建Activiti.cfg.xml文件,文件內容為:

    ?

    ?

    [java]?view plain?copy
  • <beans?xmlns="http://www.springframework.org/schema/beans"??
  • ????xmlns:context="http://www.springframework.org/schema/context"?xmlns:tx="http://www.springframework.org/schema/tx"??
  • ????xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"??
  • ????xsi:schemaLocation="http://www.springframework.org/schema/beans?http://www.springframework.org/schema/beans/spring-beans.xsd??
  • http://www.springframework.org/schema/context?http://www.springframework.org/schema/context/spring-context-2.5.xsd??
  • http://www.springframework.org/schema/tx?http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">??
  • ??
  • ??
  • ????<bean?id="processEngineConfiguration"??
  • ????????class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">??
  • ????????<!--?連接數據的配置?-->??
  • ????????<property?name="jdbcDriver"?value="com.mysql.jdbc.Driver"></property>??
  • ????????<property?name="jdbcUrl"??
  • ????????????value="jdbc:mysql://localhost:3306/activiti1?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=utf8"></property>??
  • ????????<property?name="jdbcUsername"?value="root"></property>??
  • ????????<property?name="jdbcPassword"?value="123456"></property>??
  • ????????<!--?沒有表創建表?-->??
  • ????????<property?name="databaseSchemaUpdate"?value="true"></property>??
  • ????</bean>??
  • ??
  • </beans>??


  • ?

    ? ? 通過代碼來加載配置文件中內容:

    ?

    ?

    [java]?view plain?copy
  • /**?
  • ?*?使用配置文件來創建數據庫中的表?
  • ?*/??
  • @Test??
  • public?void?createTable_2()?{??
  • ????//通過讓工作流引擎的全部配置對象來執行配置文件中的內容來創建流程引擎對象??
  • ????ProcessEngine?processEngine?=?ProcessEngineConfiguration??
  • ????????????.createProcessEngineConfigurationFromResource(??
  • ????????????????????"activiti.cfg.xml").buildProcessEngine();??
  • ????System.out.println("processEngine"?+?processEngine);??
  • }??

  • 運行產生的結果與第一種是一樣的,其中這一種通過配置文件的方式是用的是比第一種多的。

    ?

    ?

    ?

    連接數據庫url寫法:

    ?

    ? ? 無論是通過代碼還是通過xml文件來創建工作流的表,里面都涉及到一個知識點就是mysqlurl的寫法,我們進行下小結:

    ?

    ? ? #autoReconnect當數據庫連接丟失時是否自動連接,取值true/false 缺省為false

    ?

    ? ? #maxReconnects如果autoReconnect為true,此參數為重試次數,缺省為3次?

    ?

    ? ? #initialTimeout如果autoReconnect為true,此參數為重新連接前等待的秒數缺省為2

    ?

    ? ? #maxRows設置查詢時返回的行數,0表示全部缺省為0

    ?

    ? ? #useUnicode是否使用unicode輸出,true/false缺省為false

    ?

    ? ? #characterEncoding如果useUnicode,該參數制定encoding類型,建議使用utf8缺省為無

    ?

    ? ? #createDatabaseIfNotExist當JDBC連接指定數據庫,如果此數據庫不存在,此參數值為true時,則自動創建此數據庫

    ?

    ? ? 下面是一個url的例子:

    ?

    [java]?view plain?copy
  • jdbc:mysql://localhost:3306/ourmysql???
  • createDatabaseIfNotExist=true&??
  • amp;useUnicode=true&??
  • amp;characterEncoding=utf8&??
  • amp;autoReconnect=true&??
  • amp;useLocalSessionState=true??


  • ?

    四、核心對象ProcessEngine

    ?

    ? ? 數據庫里的表創建完畢,接下來我們講述activiti里面的核心對象ProcessEngine。

    ?

    ? ? ProcessEngine類,一般稱為流程引擎類,沒錯,這個流程引擎就是我們上一篇文章中提到的流程引擎,它是activiti中最核心的類,并且這個類是線程安全的,所有的線程和請求都可以使用同一個ProcessEngine對象,其它常用類幾乎也都是由它而來的。

    ?

    得到ProcessEngine對象:

    ?

    ? ? 方式1:使用classpath根目錄下的默認配置文件jbpm.cfg.xml創建一個單例的ProcessEngine

    ?

    ?

    [java]?view plain?copy
  • ProcessEngineprocessEngine?=?ProcessEngines.getDefaultProcessEngine();??

  • ? ? 方式2:指定其他位置:配置文件,如src根目錄config包下的my-jbpm-cfg.xml。

    ?

    ?

    ?

    [java]?view plain?copy
  • ProcessEngineprocessEngine?=?ProcessEngineConfiguration??
  • .createProcessEngineConfigurationFromResource(??
  • "config/my-jbpm-cfg.xml").buildProcessEngine();??


  • ?

    得到各個Service

    ?

    ? ? RepositoryService

    ?

    ? ? RepositoryService是管理流程定義的倉庫服務的接口。

    ?

    ?

    [java]?view plain?copy
  • RepositoryServicerepositoryService?=?processEngine.getRepositoryService();??

  • ? ??RuntimeService

    ?

    ?

    ? ? RuntimeService是activiti的流程執行服務類。可以從這個服務類中獲取很多關于流程執行相關的信息,如執行管理,包括啟動、推進、刪除流程實例等操作。

    ?

    ?

    [java]?view plain?copy
  • RuntimeServiceruntimeService?=?processEngine.getRuntimeService();??

  • ? ??TaskService

    ?

    ?

    ? ? TaskService是activiti的任務服務類。可以從這個類中獲取任務的信息。

    ?

    ?

    ?

    [java]?view plain?copy
  • TaskServicetaskservice?=?processEngine.getTaskService();??

  • ? ??HistoryService

    ?

    ?

    ? ? HistoryService 是activiti的查詢歷史信息的類。在一個流程執行完成后,這個對象為我們提供查詢歷史信息。

    ?

    ?

    [java]?view plain?copy
  • HistoryServicehistoryService?=?processEngine.getHistoryService();??

  • ? ? 到這里關于activiti核心對象ProcessEngine先介紹這么多,下面看我們的小的helloworlddemo

    ?

    ?

    五、Demo流程

    ?

    第一步流程設計畫出業務流程

    ?

    我們通過流程設計器就可以拖拖拽拽出我們的流程,同時設置相關屬性,保存后會生成兩個文件,分別是helloworld.bpmnhelloworld.png.

    ?

    這是我們的流程圖:

    ?

    ?

    第二步部署流程定義

    ?

    ?

    [java]?view plain?copy
  • /**?
  • ?*?部署流程定義?
  • ?*/??
  • @Test??
  • public?void?deploymentProcessDefinition()?{??
  • ????//創建核心引擎對象??
  • ????ProcessEngine?processEngine?=?ProcessEngines.getDefaultProcessEngine();??
  • ????Deployment?deployment?=?processEngine.getRepositoryService()//?與流程定義和部署對象相關的service??
  • ????????????.createDeployment()//?創建一個部署對象??
  • ????????????.name("helloworld入門程序")//?添加部署的名稱??
  • ????????????.addClasspathResource("diagrams/helloworld.bpmn")//?classpath的資源中加載,一次只能加載??
  • ????????????????????????????????????????????????????????????????//?一個文件??
  • ????????????.addClasspathResource("diagrams/helloworld.png")//?classpath的資源中加載,一次只能加載??
  • ????????????????????????????????????????????????????????????//?一個文件??
  • ????????????.deploy();//?完成部署??
  • ????System.out.println("部署ID:"?+?deployment.getId());??
  • ????System.out.println("部署名稱:"?+?deployment.getName());??
  • }??

  • 運行結果:

    ?

    ?

    ? ? 部署ID:1

    ? ? 部署名稱:helloworld入門程序

    ?

    ?

    第三步?啟動流程實例

    ?

    ?

    [java]?view plain?copy
  • /**?
  • ?*?啟動流程實例?
  • ?*/??
  • @Test??
  • public?void?startProcessInstance()?{??
  • ????//?流程定義的key??
  • ????String?processDefinitionKey?=?"HelloWorld";??
  • ????ProcessInstance?pi?=?processEngine.getRuntimeService()//?于正在執行的流程實例和執行對象相關的Service??
  • ????????????.startProcessInstanceByKey(processDefinitionKey);//?使用流程定義的key啟動流程實例,key對應hellworld.bpmn文件中id的屬性值,使用key值啟動,默認是按照最新版本的流程定義啟動??
  • ????System.out.println("流程實例ID:"?+?pi.getId());//?流程實例ID?101??
  • ????System.out.println("流程定義ID:"?+?pi.getProcessDefinitionId());?//?流程定義ID?HelloWorld:1:4??

  • 運行結果為:

    ?

    ?

    ? ? 流程實例ID:101

    ? ? 流程定義ID:HelloWorld:1:4

    ?

    第四步查詢當前辦理人的個人任務

    ?

    ?

    [java]?view plain?copy
  • /**?
  • ?*?查詢當前人的個人任務?
  • ?*/??
  • @Test??
  • public?void?findMyPersonTask()?{??
  • ????String?assignee?=?"張三";??
  • ????List<Task>?list?=?processEngine.getTaskService()//?與正在執行的認為管理相關的Service??
  • ????????????.createTaskQuery()//?創建任務查詢對象??
  • ????????????.taskAssignee(assignee)//?指定個人認為查詢,指定辦理人??
  • ????????????.list();??
  • ??
  • ????if?(list?!=?null?&&?list.size()?>?0)?{??
  • ????????for?(Task?task:list)?{??
  • ????????????System.out.println("任務ID:"+task.getId());??
  • ????????????System.out.println("任務名稱:"+task.getName());??
  • ????????????System.out.println("任務的創建時間"+task);??
  • ????????????System.out.println("任務的辦理人:"+task.getAssignee());??
  • ????????????System.out.println("流程實例ID:"+task.getProcessInstanceId());??
  • ????????????System.out.println("執行對象ID:"+task.getExecutionId());??
  • ????????????System.out.println("流程定義ID:"+task.getProcessDefinitionId());??
  • ????????????System.out.println("#################################");??
  • ????????}??
  • ????}??
  • }??

  • 運行結果:

    ?

    ?

    ? ? 任務ID:104

    ? ? 任務名稱:提交申請

    ? ? 任務的創建時間Task[id=104,name=提交申請]

    ? ? 任務的辦理人:張三

    ? ? 流程實例ID:101

    ? ? 執行對象ID:101

    ? ? 流程定義ID:HelloWorld:1:4

    ? ? #################################

    ?

    ?

    第五步?完成任務

    ?

    ?

    [java]?view plain?copy
  • /**?
  • ?*?完成我的任務?
  • ?*/??
  • @Test??
  • public?void?completeMyPersonTask(){??
  • ????//任務Id??
  • ????String?taskId="104";??
  • ????processEngine.getTaskService()//與正在執行的認為管理相關的Service??
  • ????????????.complete(taskId);??
  • ????System.out.println("完成任務:任務ID:"+taskId);??
  • ??
  • }??

  • 運行結果:

    ?

    ?

    ? ? 完成任務:任務ID:104

    ?

    ?

    ? ? 到這里我們就完成了一個簡單的helloworld,從畫一個流程圖、到部署流程定義、啟動流程實例、查詢當前辦理人的任務、完成當前的任務,從第二步開始每一步在數據庫中都會有相應的記錄進行添加、刪除、更新,我們運行產生的結果也都是從數據庫中查出來的記錄,關于每一步對應與數據庫中怎樣的變化,我們會在后續的文章繼續介紹。

    ?

    ?

    六、后記

    ?

    ? ? 我們本篇文章主要講述了activiti的環境準備包含各個軟件的版本和安裝流程設計器,接下來我們講解了兩種方式來創建activiti23張表,還夾雜著一個數據庫連接url的寫法,接下來是activiti核心對象ProcessEngine,以及通過ProcessEngine獲取相關的Service,最后通過一個特別簡單的小demo來讓大家對部署流程定義、啟動流程實例、查詢當前任務、完成當前任務這些步驟有一個感性的認識,詳細的內容我們會在后續文章繼續介紹。

    http://blog.csdn.net/zwk626542417/article/details/46594505

    轉載于:https://www.cnblogs.com/zzuzhenlei/p/7569440.html

    總結

    以上是生活随笔為你收集整理的工作流学习——Activiti整体认识二步曲的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。