前两篇文章已经讲了怎么创建DPMN文件,那么开始试着运行一个DEMO
提前我说下我学习过程遇到的一个问题,就是我按照网上的类型,自己编写的DPMN文件,命名为test.XML后,部署上去一直提示找不到。原来是activiti 的模版必须以 bpmn20.xml 或者 bpmn结尾,最终修改为 test.bpmn20.xml 才可以。这个问题要尤其注意
一 首先 ProcessEngines 由 ProcessEngineConfiguration 进行创建的
ProcessEngine是线程安全的
ProcessEngineConfiguration 可以数据库进行配置。如下
@Configuration
@Slf4j
public class ProcessConfig {
@Autowired
private DataSourceProperties dataSourceProperties;
@Bean
@Primary
protected ProcessEngineConfiguration configuration() {
//setAsyncExecutorActivate
List<FlowableEventListener> list = new ArrayList<>();
list.add(new JobListener());
Map<String,List<FlowableEventListener>> map = new HashMap<>();
map.put("JOB_EXECUTION_SUCCESS",list);
map.put("JOB_EXECUTION_FAILURE",list);
ProcessEngineConfiguration processEngineConfiguration = StandaloneProcessEngineConfiguration
.createStandaloneProcessEngineConfiguration()
.setJdbcUrl(dataSourceProperties.getUrl())
.setJdbcDriver(dataSourceProperties.getDriverClassName())
.setJdbcUsername(dataSourceProperties.getUsername())
.setJdbcPassword(dataSourceProperties.getPassword())
.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE)
.setAsyncExecutorActivate(true)
.setCreateDiagramOnDeploy(true)
.setProcessDiagramGenerator(new DefaultProcessDiagramGenerator())
.setActivityFontName("幼圆")
.setAnnotationFontName("幼圆")
.setLabelFontName("幼圆");
processEngineConfiguration.setTypedEventListeners(map);
return processEngineConfiguration;
}
@Bean
protected ProcessEngine engine() {
//创建流程引擎
return ProcessEngines.getDefaultProcessEngine();
}
}
以上摘抄网上
二 部署流程定义
需要用到 RepositoryService
//流程部署
Deployment deployment = repositoryService.createDeployment()
.addClasspathResource("processes/MyProcess2.bpmn20.xml")
.name("myProcess")
.deploy();
部署流程 会把流程持久化到数据库中,并且该对象,可以通过API进行调用
三 开始一个流程实例
通过 RuntimeService 即 processEngine.getRuntimeService()
ProcessInstance processInstance=runtimeService.startProcessInstanceByKey("myProcess",variables);
或runtimeService.startProcessInstanceById 根据流程部署的ID
四 查询和完成任务
通过 taskService
1 完成任务
Map<String, Object> variables = task.getProcessVariables();
variables.put("productID",productID);
taskService.complete(taskID, variables);
variables 为变量
2 查询任务
List<Task> tasks = taskService.createTaskQuery().list();
for (Task task : tasks) {
System.out.println(task.toString());
}
我们可以查看这个任务的 taskId、taskDefinitionKey、 taskName、taskProcessInstanceId 等信息
3 查询任务所有的变量(分解任务编号)
Map<String, Object> processVariables = taskService.getVariables(taskid);
五 删除Deployment
通过repositoryService
1 查询目前有几个Deployment
DeploymentQuery deploymentQuery=repositoryService.createDeploymentQuery();
List<Deployment> deployments =deploymentQuery.list();
deployments.forEach(deployment -> {
System.out.println(":"+deployment.getId()+deployment.getName());
});
2 删除Deployment
repositoryService.deleteDeployment(deployment.getId(),true);