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("節點超時事件");
        }
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM