camunda日常操作

camunda多数据源,即业务数据库与camunda数据库分开

业务数据库正常配置在application.yml中。添加camunda配置类

package com.example.workflow;

import org.camunda.bpm.engine.impl.cfg.StandaloneProcessEngineConfiguration;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MyCamundaProcessEngineConfiguration extends StandaloneProcessEngineConfiguration {

    @Value("${camunda.db.url}")
    private String jdbcUrl;
    @Value("${camunda.db.username}")
    private String jdbcUsername;
    @Value("${camunda.db.password}")
    private String jdbcPassword;
    @Value("${camunda.db.driver}")
    private String jdbcDriver;


    public MyCamundaProcessEngineConfiguration() {
//        没有camunda表时自动建表
        super.databaseSchemaUpdate = "true";
    }

    @Override
    protected void initDataSource() {
        super.jdbcDriver = jdbcDriver;
        super.jdbcUrl = jdbcUrl;
        super.jdbcUsername = jdbcUsername;
        super.jdbcPassword = jdbcPassword;
        super.initDataSource();
    }
}

 

在使用camunda过程中难免使用监听器

package com.example.workflow;

import org.camunda.bpm.engine.delegate.DelegateExecution;
import org.camunda.bpm.engine.delegate.DelegateTask;
import org.camunda.bpm.engine.delegate.ExecutionListener;
import org.camunda.bpm.engine.delegate.TaskListener;
import org.camunda.bpm.engine.task.IdentityLink;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.client.RestTemplate;

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class MyProcessListener implements ExecutionListener, TaskListener {


    private static RestTemplate restTemplate;

    /**
     * @Author
     * @Description 这里将RestTemplate设置为静态变量并且通过setter方式注入是因为在低版本的camunda中,监听器是多实例的
     * 在启动时会注入,但是在执行时,却发现实例为空,因此使用setter注入,同时使用静态变量保存注入实例
     * @Date 19:47 2022/4/9
     * @Param [restTemplate]
     * @return void
     **/
    @Autowired
    public void setRestTemplate(RestTemplate restTemplate) {
        this.restTemplate = restTemplate;
    }

    /**
     * @Author
     * @Description 流程执行监听器
     * @Date 19:32 2022/4/9
     * @Param [delegateExecution]
     * @return void
     **/
    @Override
    public void notify(DelegateExecution delegateExecution) throws Exception {
//        事件名称
        String eventName = delegateExecution.getEventName();
//        流程实例ID
        String processInstanceId = delegateExecution.getProcessInstanceId();
//        获取过程变量
        Map<String, Object> variables = delegateExecution.getVariables();
        switch (eventName) {
            case EVENTNAME_START:
                System.out.println("流程启动事件");
            default:
                System.out.println("流程结束事件");

        }
    }

    /**
     * @Author 赵迎旭
     * @Description 节点监听器
     * @Date 19:33 2022/4/9
     * @Param [delegateTask]
     * @return void
     **/
    @Override
    public void notify(DelegateTask delegateTask) {
//        节点事件名称
        String eventName = delegateTask.getEventName();
//        当前节点的名称
        String currentActivityName = delegateTask.getExecution().getCurrentActivityName();
//        节点执行人
        String assignee = delegateTask.getAssignee();
//        获取所有的可处理人(都有谁可以处理,但在处理前需要先指派任务给人)
        List<String> collect = delegateTask.getCandidates().stream().map(IdentityLink::getGroupId).collect(Collectors.toList());
        switch (eventName) {
            case EVENTNAME_CREATE:
                System.out.println("节点创建事件");
            case EVENTNAME_ASSIGNMENT:
                System.out.println("节点分派事件");
            case EVENTNAME_COMPLETE:
                System.out.println("节点完成事件");
            case EVENTNAME_UPDATE:
                System.out.println("节点删除事件");
            case EVENTNAME_DELETE:
                System.out.println("节点删除事件");
            default:
                System.out.println("节点超时事件");
        }
    }
}

 

posted @ 2022-04-09 19:54  陈无问  阅读(1348)  评论(0编辑  收藏  举报