spring boot 整合 activiti 6.0

一、爲什麼選擇Activiti(本人已經轉爲使用eclipse,idea的bpmn工具不好用)

在這裏插入圖片描述

二、核心7大接口、28張表

在這裏插入圖片描述

7大接口(service)

  1. RepositoryService:提供一系列管理流程部署和流程定義的API。
  2. RuntimeService:在流程運行時對流程實例進行管理與控制。
  3. TaskService:對流程任務進行管理,例如任務提醒、任務完成和創建任務等。
  4. IdentityService:提供對流程角色數據進行管理的API,這些角色數據包括用戶組、用戶及它們之間的關係。
  5. ManagementService:提供對流程引擎進行管理和維護的服務。
  6. HistoryService:對流程的歷史數據進行操作,包括查詢、刪除這些歷史數據。
  7. FormService:表單服務。

(二)28張表

在這裏插入圖片描述

  1. act_ge_ 通用數據表,ge是general的縮寫
  2. act_hi_ 歷史數據表,hi是history的縮寫,對應HistoryService接口
  3. act_id_ 身份數據表,id是identity的縮寫,對應IdentityService接口
  4. act_re_ 流程存儲表,re是repository的縮寫,對應RepositoryService接口,存儲流程部署和流程定義等靜態數據
  5. act_ru_ 運行時數據表,ru是runtime的縮寫,對應RuntimeService接口和TaskService接口,存儲流程實例和用戶任務等動態數據

三、Spring Boot2.0與Activiti 6.0整合

  1. 在POM文件中添加依賴

    <dependency>
        <groupId>org.activiti</groupId>
        <artifactId>activiti-spring-boot-starter-basic</artifactId>
        <version>6.0.0</version>
    </dependency>
    
  2. @SpringBootApplication(exclude = SecurityAutoConfiguration.class)//排除類

  3. idea 添加activiti繪畫插件

  4. 創建cs.bpmn文件到項目文件夾/resources/processes下,設置流程:
    在這裏插入圖片描述

  5. 修改cs.bpmn爲xml,點擊選中cs.xml文件(亂碼的話自行解決)右鍵,如下圖:
    在這裏插入圖片描述
    在這裏插入圖片描述

  6. application.yml文件添加配置項

    spring:
    	activiti:
    	    check-process-definitions: false
    
  7. 啓動應用,會在數據庫裏創建28張表

  8. 完成以上步驟,就可以在程序中使用自動注入的方式,使用Activiti的7大接口。

    @Autowired
    private RuntimeService runtimeService;
    
    @Autowired
    private TaskService taskService;
    
    @Autowired
    private IdentityService identityService;
    
    @Autowired
    private RepositoryService repositoryService;
    
    @Autowired
    private ProcessEngine processEngine;
    
    @Autowired
    private HistoryService historyService;
    
  9. 部署工作流(流程定義和部署對象相關的service)

        @Test
        public void dybs() {
            Deployment deployment = repositoryService//流程定義和部署對象相關的service
                    .createDeployment()//創建一個部署對象
                    .name("helloWorld")//創建一個部署對象
                    .addClasspathResource("processes/qjsp.bpmn")// 加載文件
                    .addClasspathResource("processes/qjsp.png")// 加載文件
                    .deploy();//完成部署
            System.out.println("部署id"+deployment.getId());
            System.out.println("部署名稱"+deployment.getName());
        }
    
  10. 啓動工作流

    @Test
    public void qdlc() {
    	ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("qjlc");
    	System.out.println("流程實例id:" + processInstance.getId());
    	System.out.println("流程定義id:" + processInstance.getProcessDefinitionId());
    }
    
  11. 查詢當前人的任務

    public void grrw() {
    String assignee = "李四";
    List<Task> res = taskService.createTaskQuery().taskAssignee(assignee).list();
    	if (res.size() > 0 && res != null) {
    		for (Task t : res) {
    		System.out.println("任務id:" + t.getId());
    		System.out.println("任務名稱:" + t.getName());
    		System.out.println("任務的創建時間:" + t.getCreateTime());
    		System.out.println("任務的辦理人:" + t.getAssignee());
    		System.out.println("流程實例的id:" + t.getProcessInstanceId());
    		System.out.println("執行對象id:" + t.getExecutionId());
    		System.out.println("執行對象id:" + t.getProcessDefinitionId());
    		System.out.println("####################################");
    		}
    	}
    }
    
  12. 完成任務

    @Test
    	public void wcrw() {
    		String taskId = "7502";
    		taskService.complete(taskId);
    		System.out.println("完成任務-任務id:"+taskId);
    	}
    

第二種集成方式

<dependency>
    <groupId>org.activiti</groupId>
    <artifactId>activiti-spring</artifactId>
    <version>6.0.0</version>
</dependency>  

ActivitiConfig.java配置

package com.ljq.rxrs.config;


import java.io.IOException;

import javax.sql.DataSource;

import org.activiti.engine.HistoryService;
import org.activiti.engine.IdentityService;
import org.activiti.engine.ManagementService;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.spring.SpringProcessEngineConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;

@Configuration
public class ActivitiConfig {

	@Bean
    public ProcessEngine processEngine(DataSourceTransactionManager transactionManager, DataSource dataSource) throws IOException {
        SpringProcessEngineConfiguration configuration = new SpringProcessEngineConfiguration();
        //自動部署已有的流程文件
        Resource[] resources = new PathMatchingResourcePatternResolver().getResources(ResourceLoader.CLASSPATH_URL_PREFIX + "processes/*.bpmn");
        configuration.setTransactionManager(transactionManager);
        configuration.setDataSource(dataSource);
        configuration.setDatabaseSchemaUpdate("true");
        configuration.setDeploymentResources(resources);
        configuration.setDbIdentityUsed(false);
        return configuration.buildProcessEngine();
    }
 
    @Bean
    public RepositoryService repositoryService(ProcessEngine processEngine) {
        return processEngine.getRepositoryService();
    }
 
    @Bean
    public RuntimeService runtimeService(ProcessEngine processEngine) {
        return processEngine.getRuntimeService();
    }
 
    @Bean
    public TaskService taskService(ProcessEngine processEngine) {
        return processEngine.getTaskService();
    }
 
    @Bean
    public HistoryService historyService(ProcessEngine processEngine) {
        return processEngine.getHistoryService();
    }
 
    @Bean
    public ManagementService managementService(ProcessEngine processEngine) {
        return processEngine.getManagementService();
    }
 
    @Bean
    public IdentityService identityService(ProcessEngine processEngine) {
        return processEngine.getIdentityService();
    }

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章