一、學(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)括丁,請各位大佬指正,謝謝伶选。