前两篇文章已经讲了怎么创建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);