1. 程式人生 > >SpringBoot入門十四,添加Activiti5.22工作流

SpringBoot入門十四,添加Activiti5.22工作流

ges utf-8 add create 分享圖片 bean mon pen param

項目基本配置參考SpringBoot入門一,使用myEclipse新建一個SpringBoot項目,使用myEclipse新建一個SpringBoot項目即可。現在來給項目添加一個Activiti5.22支持,Springboot采用2.0.7的版本(後來試著升級到2.1.1和2.2.1,都是失敗),具體內容如下:

  1. pom.xml添加以下配置信息
<!-- 1.設置Springboot版本 -->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.7.RELEASE</version>
    <relativePath />
</parent>
<!-- 2.設置公共參數 -->
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
    <!-- Maven install 時,測試環境@Test中如果有中文輸出是亂碼,加上這句話試試 -->
    <argLine>-Dfile.encoding=UTF-8</argLine>
    <!-- 設置要整合的Activiti版本 -->
    <activiti.version>5.22.0</activiti.version>   
</properties>
<!-- 3.引入Activiti支持 -->
<dependencies>
    <dependency>
        <groupId>org.activiti</groupId>
        <artifactId>activiti-spring-boot-starter-basic</artifactId>
        <version>${activiti.version}</version>
    </dependency>
</dependencies>
  1. 配置文件中添加以下配置信息
# 設置系統啟動時自動建立Activiti表(Springboot1.x的版本中不需要做此設置)
# always為始終執行初始化,embedded只初始化內存數據庫(默認值),如h2等,never為不執行初始化.
spring.datasource.initialization-mode=always

# Activiti配置
## 自動構建Activiti數據庫表,設置value="true",啟動時檢測,無表創建,有表跳過;設置value="drop-create"
## 每次啟動時建新表(Springboot1.x中生效,Springboot2.x中已經不生效,因此關閉)
#spring.activiti.database-schema-update=true
## Activiti自動部署驗證設置,:true-開啟(默認)、false-關閉
spring.activiti.check-process-definitions=false
## 設置true後將代替那些老的Job executor
spring.activiti.async-executor-enabled=false
## Activiti定時掃描任務,默認:true(開啟),不使用的話建議關掉,需要和spring.activiti.async-executor-enabled=false配合使用,否則不起作用
spring.activiti.job-executor-activate=false

3.創建流程文件
  將創建好的文件放置在src/main/resources目錄下
技術分享圖片

4.創建一個測試service


import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class ActivitiTestService {
    @Autowired  
    private RepositoryService repositoryService; 
    @Autowired  
    private RuntimeService runtimeService;  
    @Autowired  
    private TaskService taskService; 

    /**
     * @功能描述:   流程測試
     *
     * @param flowType 
     */
    public void test(String flowType){
        //部署流程,只要是符合BPMN2規範的XML文件,理論上都可以被ACTIVITI部署
        Deployment deployment = repositoryService.createDeployment().name("測試流程一").addClasspathResource("testProcess.bpmn").addClasspathResource("testProcess.png").deploy();
        //獲取流程定義
        ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().deploymentId(deployment.getId()).singleResult();
        //啟動流程定義,返回流程實例
        ProcessInstance pi = runtimeService.startProcessInstanceById(processDefinition.getId());
        String processId = pi.getId();
        System.out.println("流程創建成功,當前流程實例ID:"+processId);

        Task task=taskService.createTaskQuery().processInstanceId(processId).singleResult();
        System.out.println("第一次執行前,任務名稱:"+task.getName());
        taskService.complete(task.getId());

        int count = 2;
        while(true){
            task = taskService.createTaskQuery().processInstanceId(processId).singleResult();
            if (null == task) {
                System.out.println("task為null,任務執行完畢:"+task);
                break;
            } else {
                System.out.println("第"+count+++"次執行前,任務名稱:"+task.getName());
                taskService.complete(task.getId());
            }
        }
    }
}

5.創建一個測試controller

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import com.qfx.common.bean.MessageBean;
import com.qfx.common.controller.BaseController;
import com.qfx.workflow.service.ActivitiTestService;
import com.qfx.workflow.service.ModelService;

@Controller
@RequestMapping("activiti")
public class ActivitiController extends BaseController {

    @Autowired
    ActivitiTestService activitiService;

    @Autowired
    ModelService modelService;

    @RequestMapping("test")
    public String test(String flowType){
        // 流程測試
        activitiService.test(flowType);

        MessageBean messageBean = new MessageBean();
        messageBean.setMessage("測試流程執行完畢了,請看後臺輸出!");
        request.setAttribute("messageBean", messageBean);

        return "../index";
    }
}

6.測試調用,控制臺顯示調用成功
技術分享圖片

SpringBoot入門十四,添加Activiti5.22工作流