SpringBoot入門十四,添加Activiti5.22工作流
阿新 • • 發佈:2019-01-03
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,都是失敗),具體內容如下:
- 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>
- 配置文件中添加以下配置信息
# 設置系統啟動時自動建立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工作流