Activiti6.0集成SpringBoot2.1.6+idea詳細基礎開發


開發環境:JDK1.8+idea工具+maven

首先idea下載插件File->settings->plugins->Marketplace  直接搜索actiBPM下載,之后重啟idea。

流程圖中中文亂碼問題:

找到idea安裝目錄bin目錄下如下圖所示兩個文件,用編輯器打開,在文件末尾添加 -Dfile.encoding=UTF-8 ,然后重啟idea,再打開流程圖就會發現中文已經可以正常顯示了。

創建springboot項目:

引入pom文件包

需要的mysql已經mybatis

啟動類是增加:

  1.  
    /**
  2.  
    * 去除springboot默認的basic驗證,否則訪問項目需要提供用戶名和密碼
  3.  
    */
  4.  
    @SpringBootApplication(exclude = {LiquibaseAutoConfiguration.class,
  5.  
    org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration. class,
  6.  
    SecurityAutoConfiguration. class})
  7.  
    public class LambdaApplication {
  8.  
     
  9.  
    public static void main(String[] args) {
  10.  
    SpringApplication.run(LambdaApplication. class, args);
  11.  
    }
  12.  
     
  13.  
    }

數據源直接使用yml或者properties配置,activiti會自動讀取配置。但需要進行配置,加載數據源

  1.  
    /**
  2.  
    *這個yml配置絕對不能少,否則啟動會失敗
  3.  
    * 意思是每次啟動對自動創建的表進行檢驗
  4.  
    */
  5.  
    spring:
  6.  
    activiti:
  7.  
    history-level: full
  8.  
    check-process-definitions: false

然后直接appliction直接啟動項目,會發現數據庫中自動創建了28張表

 

大致介紹一下這些表:

  • ACT_GE 通用類
  • ACT_HI 歷史記錄類
  • ACT_ID 用戶信息類
  • ACT_RE 流程實例類
  • ACT_RU 運行時類

詳細的介紹

表名 說明
ACT_EVT_LOG 事件日志表(實驗性質)
ACT_GE_BYTEARRAY 通用的流程定義和流程資源
ACT_GE_PROPERTY 系統相關屬性
ACT_HI_ACTINST 歷史的流程實例
ACT_HI_ATTACHMENT 歷史的流程附件
ACT_HI_COMMENT 歷史的批注信息
ACT_HI_DETAIL 歷史的流程運行中的細節信息
ACT_HI_IDENTITYLINK 歷史的流程運行過程中用戶關系
ACT_HI_PROCINST 歷史的流程實例
ACT_HI_TASKINST 歷史的任務實例
ACT_HI_VARINST 歷史的流程運行中的變量信息
ACT_ID_GROUP
ACT_ID_INFO 用戶詳細信息
ACT_ID_MEMBERSHIP 用戶和組關系的中間表
ACT_ID_USER 用戶表
ACT_RE_DEPLOYMENT 部署的流程信息
ACT_RE_MODEL 流程模型信息
ACT_RE_PROCDEF 流程定義信息
ACT_RU_DEADLETTER_JOB 存儲執行失敗的任務表(異步)
ACT_RU_EVENT_SUBSCR 運行時事件
ACT_RU_EXECUTION 運行時流程執行實例
ACT_RU_IDENTITYLINK 運行時用戶關系信息
ACT_RU_JOB 運行時作業(異步)
ACT_RU_SUSPENDED_JOB 暫停運行的任務(異步)
ACT_RU_TASK 運行時任務
ACT_RU_TIMER_JOB 任務定時器表(異步)
ACT_RU_VARIABLE 運行時變量表
ACT_PROCDEF_INFO 流程定義信息表
  1.  
    @Autowired
  2.  
    private RuntimeService runtimeService;
  3.  
     
  4.  
    @Autowired
  5.  
    private TaskService taskService;
  6.  
     
  7.  
    @Autowired
  8.  
    private IdentityService identityService;
  9.  
     
  10.  
    @Autowired
  11.  
    private RepositoryService repositoryService;
  12.  
     
  13.  
    @Autowired
  14.  
    private ProcessEngine processEngine;
  15.  
     
  16.  
    @Autowired
  17.  
    private HistoryService historyService;

springboot直接使用這些service管理操作這些表。就不再需要 processEngine.get***service();

Service 管理的表
RepositoryService 通用類的表
FormService 通過表單提交的任務的服務類
HistoryService 歷史記錄表
IdentityService 用戶信息表
ManagementService 自定義查詢的服務類 managementService.executeCustomSql
RuntimeService 運行時相關表
TaskService 任務表, 可以查詢 ACT_RU_ ACT_HI_

 在resources下創建一個:processes文件夾,放流程文件。之后右鍵點擊文件夾:創建流程文件

這是我創建的一個流程文件,直接保存即可。無需和eclipse一樣需要去生成一個png文件。在使用repositoryService部署流程對象時他會在數據庫的ACT_GE_BYTEARRAY 通用的流程定義和流程資源表中創建保存相應的png以及bpmn文件

這我就不詳細截圖了:分別對應的是name名稱,assignee以及委托人:組長是group,經理是manager,老板是boss 

使用方法:

發布流程:

  1.  
    /**
  2.  
    * 發布流程
  3.  
    *
  4.  
    * @throws IOException
  5.  
    */
  6.  
    @Test
  7.  
    public void deploymentProcesses_zip() throws IOException {
  8.  
     
  9.  
    Deployment deploy = repositoryService.createDeployment() //創建一個部署的對象
  10.  
    .name( "請假流程定義")//創建流程名稱
  11.  
    .addClasspathResource( "processes/activiti_demo.bpmn")//指定zip完成部署
  12.  
    .deploy();
  13.  
    // long count = repositoryService.createProcessDefinitionQuery().count();
  14.  
    System. out.println("部署id" + deploy.getId());
  15.  
    System. out.println("部署名稱" + deploy.getName());
  16.  
    // System.out.println("部署名稱"+count);
  17.  
     
  18.  
    }

 啟動流程:

  1.  
    /**
  2.  
    * 啟動流程
  3.  
    * RuntimeService
  4.  
    */
  5.  
    @Test
  6.  
    public void startProcess() {
  7.  
    //可根據id、key、message啟動流程
  8.  
    ProcessInstance processInstance = runtimeService.startProcessInstanceByKey( "myProcess_1");
  9.  
    System. out.println(processInstance.getName());
  10.  
    System. out.println(processInstance.getProcessDefinitionId());
  11.  
    System. out.println(processInstance.getId());
  12.  
    }

查看任務: 

  1.  
     
  2.  
    /**
  3.  
    * 查看任務
  4.  
    * TaskService
  5.  
    */
  6.  
    @Test
  7.  
    public void queryTask() {
  8.  
    //根據assignee(代理人)查詢任務
  9.  
    String assignee = "manager";
  10.  
    List<Task> tasks = taskService.createTaskQuery().taskAssignee(assignee).list();
  11.  
     
  12.  
    int size = tasks.size();
  13.  
    for (int i = 0; i < size; i++) {
  14.  
    Task task = tasks.get(i);
  15.  
     
  16.  
    }
  17.  
    //獲取最新一條
  18.  
    for (Task task : tasks) {
  19.  
    System.out.println( "taskId:" + task.getId() +
  20.  
    ",taskName:" + task.getName() +
  21.  
    ",assignee:" + task.getAssignee() +
  22.  
    ",createTime:" + task.getCreateTime());
  23.  
    }
  24.  
    }

辦理任務:

  1.  
    /**
  2.  
    * 辦理任務
  3.  
    */
  4.  
    @Test
  5.  
    public void handleTask() {
  6.  
    //根據上一步生成的taskId執行任務
  7.  
    String taskId = "12505";
  8.  
    taskService.complete(taskId);
  9.  
    }

這就是一套簡單的業務流程代碼了。

所有的數據可以根據相應的表進行查看,特別注意的是。這只是測試:在相應的項目中如果需要使用,需要根據具體的用戶user以及功能權限進行邏輯處理

  • 源碼地址:github源碼 https://github.com/superqinchao/activiti-demo/tree/feature/activiti_demo 分支feature/activiti_demo

 

參考:https://blog.csdn.net/qinchao_mei/article/details/100661212


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM