一、學(xué)習(xí)背景
近期因工作需要研究了一波Activiti工作流,流程中需要根據(jù)業(yè)務(wù)來推進流程的流轉(zhuǎn)、多人處理任務(wù)、排他網(wǎng)關(guān)、定時邊界任務(wù)、撤回等功能。不多說,直接上正文。
二、從零開始
新建springboot項目并創(chuàng)建activiti6的28張表,這里不闡述28張表每個的含義,主要有ACT_HI_(歷史信息表)、ACT_RU_(運行時信息表)、ACT_ID_(身份信息類)、ACT_RE_(靜態(tài)資源類)。
配置文件:
@Configuration
public class ActivitiConfig {
@Autowired
private DataSource dataSource;
@Autowired
private ResourcePatternResolver resourceLoader;
/**
* 初始化配置,將創(chuàng)建28張表
* @return
*/
@Bean
public StandaloneProcessEngineConfiguration processEngineConfiguration() {
StandaloneProcessEngineConfiguration configuration = new StandaloneProcessEngineConfiguration();
configuration.setDataSource(dataSource);
configuration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
configuration.setAsyncExecutorActivate(false);
return configuration;
}
@Bean
public ProcessEngine processEngine() {
return processEngineConfiguration().buildProcessEngine();
}
@Bean
public RepositoryService repositoryService() {
return processEngine().getRepositoryService();
}
@Bean
public RuntimeService runtimeService() {
return processEngine().getRuntimeService();
}
@Bean
public TaskService taskService() {
return processEngine().getTaskService();
}
}
上文代碼中將activiti常用的幾個service注入到spring容器中,方便在其他地方直接注入即可使用。
TestProcess.bpmn文件
User Task配置信息
三、ActivitiHelloWorld
寫一個controller,實現(xiàn)部署流程、啟動流程、完成任務(wù)節(jié)點,具體代碼如下:
@RestController
@RequestMapping("/activiti")
public class ActivitiController {
@Autowired
private RepositoryService repositoryService;
@Autowired
private RuntimeService runtimeService;
@Autowired
private TaskService taskService;
@RequestMapping("helloWorld")
public void helloWorld() {
//根據(jù)bpmn文件部署流程
Deployment deploy = repositoryService.createDeployment()
.addClasspathResource("TestProcess.bpmn")
.deploy();
//獲取流程定義
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().deploymentId(deploy.getId()).singleResult();
//啟動流程定義,返回流程實例
ProcessInstance pi = runtimeService.startProcessInstanceById(processDefinition.getId());
String processId = pi.getId();
System.out.println("流程創(chuàng)建成功,當(dāng)前流程實例ID:"+processId);
Task task=taskService.createTaskQuery().processInstanceId(processId).singleResult();
System.out.println("執(zhí)行前,任務(wù)名稱:"+task.getName());
taskService.complete(task.getId());
task = taskService.createTaskQuery().processInstanceId(processId).singleResult();
System.out.println("task為null,任務(wù)執(zhí)行完畢:"+task);
}
}
運行此程序,瀏覽器訪問 http://localhost:8080/activiti/helloWorld
可以看到如下信息:
到這里,一個activiti的demo已經(jīng)可以運行,接下來將陸續(xù)更新。。。
github地址:https://github.com/KevinZc007/acitviti6.0.git
初次寫文,如有不當(dāng),請各位大佬指正,謝謝。