springboot + camunda工作流引擎使用记录

相比于市面上流行的flowable、activiti等,camunda相对来说简单一点,不过官方文档是英文的!!!!点这里Camunda 7 Docs

一、准备工作

1.先检查springboot版本,再决定使用的camunda的版本

在这里插入图片描述
我这里使用的springboot是2.5.1,所以选择了7.15.0版本的camunda。
接下来引入依赖:

        <!-- camunda工作流 -->
        <dependency>
            <groupId>org.camunda.bpm.springboot</groupId>
            <artifactId>camunda-bpm-spring-boot-starter</artifactId>
            <version>7.15.0</version>
        </dependency>
        <dependency>
            <groupId>org.camunda.bpm.springboot</groupId>
            <artifactId>camunda-bpm-spring-boot-starter-rest</artifactId>
            <version>7.15.0</version>
        </dependency>
        <dependency>
            <groupId>org.camunda.bpm.springboot</groupId>
            <artifactId>camunda-bpm-spring-boot-starter-webapp</artifactId>
            <version>7.15.0</version>
        </dependency>

配置yml:

camunda.bpm:
  #禁止自动部署resources下面的bpmn文件
  auto-deployment-enabled: false
  generic-properties.properties:
    javaSerializationFormatEnabled: true
  admin-user:
    id: admin
    password: admin
  run:
    # https://docs.camunda.org/manual/latest/user-guide/camunda-bpm-run/#cross-origin-resource-sharing
    cors:
      enabled: true
      allowed-origins: "*"

需要注意的是,要不要禁止自动部署bpmn文件。因为springboot启动时会自动读取resources下面的bpmn文件。

2.启动项目,会自动生成camunda相关的表(act_开头)

在这里插入图片描述

3.准备绘图工具

官方有提供绘图工具的下载地址
在这里插入图片描述
通过访问:http://localhost:8090/camunda/app/cockpit/default/#/dashboard
端口需改成自己的。
在这里插入图片描述

二、绘制流程图

目前是简单的流程,后面遇到复杂的会补充上去。

在这里插入图片描述
审批人选用UserTask,点击后有一个小扳手可以修改
在这里插入图片描述
审批人需要给Assignee定义个变量,代码中会用到,比如${zhuguan}
在这里插入图片描述
审批过程中会出现同意或拒绝,所以需要加个网关上去,默认是排他网关。
在这里插入图片描述
业务过程中审批通过后可能会需要做一些数据操作,所以加上ServiceTask,定义如下
在这里插入图片描述
同意或拒绝需要加上变量,这里定义了个flag
在这里插入图片描述
我怕这里将这个文件放在resource下的bpmn文件夹下,像这样
在这里插入图片描述

最基本的流程图画完之后下一步就是部署到Camunda上去啦。

三、分享几个常用的api

1. 部署

 //部署
        Deployment deployment = repositoryService.createDeployment()
                .name(name)
                .addClasspathResource(resource)
                .deploy();

在这里插入图片描述
调用接口后,发现已经部署上去了
在这里插入图片描述
在这里插入图片描述

2.发起

        //开启流程
        //map存放必要的变量,如刚刚定义的”zhuguan“
        map.put("zhuguan", userId);
        //businessKey绑定业务,便于后面查询
        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processDefinitionKey, businessKey, map);

在这里插入图片描述
注意这里的processDefinitionKey在bpmn文件里找
在这里插入图片描述

userId传的是审批人的id
发起流程后可以看到流程已经开始跑了。

在这里插入图片描述

3. 查询待办

taskService.createTaskQuery().taskAssignee("10086").list();

传对应的值:“10086”进去可以查到刚刚那条数据

{
    "msg": "操作成功",
    "code": 200,
    "data": [
        {
            "cachedElContext": null,
            "id": "7a7241ad-4ed6-11ee-9e62-96e6f74056a5",
            "revision": 1,
            "owner": null,
            "assignee": "10086",
            "delegationState": null,
            "parentTaskId": null,
            "parentTask": null,
            "name": "主管",
            "description": null,
            "priority": 50,
            "createTime": "2023-09-09T14:02:38.000+08:00",
            "dueDate": null,
            "followUpDate": null,
            "suspensionState": 1,
            "tenantId": null,
            "executionId": "7a69dd37-4ed6-11ee-9e62-96e6f74056a5"
        }
    ]
}

4. 审批

 		map.put("flag", "true");
        taskService.complete(taskId, map);

因为这里有数据同步的操作,我们需要写一个类进行“委托执行”

/**
 * 数据同步、持久化等操作
 */
@Component("AutoSync")
public class AutoSync implements JavaDelegate {
	@Override
    public void execute(DelegateExecution execution) {
        //业务代码
        System.out.println("1111数据同步操作1111");
    }
}

在这里插入图片描述
请求通过了,检查下流程是否结束:

在这里插入图片描述
在这里插入图片描述

camunda图上的那个①看不到了,且控制台打印出内容了,说明此时流程已经结束。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以给你提供一个简单的示例代码,帮助你更好地理解如何使用Spring BootCamunda实现一个流程发起、审批、归档、退回的项目。 首先,在pom.xml文件中添加以下依赖,来集成Camunda流程引擎和Spring Boot: ```xml <dependency> <groupId>org.camunda.bpm.springboot</groupId> <artifactId>camunda-bpm-spring-boot-starter</artifactId> <version>${camunda.version}</version> </dependency> <dependency> <groupId>org.camunda.bpm.springboot</groupId> <artifactId>camunda-bpm-spring-boot-starter-webapp</artifactId> <version>${camunda.version}</version> </dependency> ``` 然后,你需要创建一个Camunda配置类,来配置Camunda流程引擎,例如: ```java @Configuration public class CamundaConfig { @Autowired private DataSource dataSource; @Bean public SpringProcessEngineConfiguration processEngineConfiguration() { SpringProcessEngineConfiguration config = new SpringProcessEngineConfiguration(); config.setDataSource(dataSource); config.setDatabaseSchemaUpdate("true"); config.setJobExecutorActivate(true); config.setHistory(HistoryLevel.FULL.getName()); return config; } @Bean public ProcessEngineFactoryBean processEngine() { ProcessEngineFactoryBean factoryBean = new ProcessEngineFactoryBean(); factoryBean.setProcessEngineConfiguration(processEngineConfiguration()); return factoryBean; } @Bean public RepositoryService repositoryService(ProcessEngine processEngine) { return processEngine.getRepositoryService(); } @Bean public RuntimeService runtimeService(ProcessEngine processEngine) { return processEngine.getRuntimeService(); } @Bean public TaskService taskService(ProcessEngine processEngine) { return processEngine.getTaskService(); } @Bean public HistoryService historyService(ProcessEngine processEngine) { return processEngine.getHistoryService(); } } ``` 接下来,你需要定义流程模型,例如一个简单的请假流程。你可以使用Camunda Modeler来设计和定义这个流程模型。然后,在项目中将这个流程模型部署到Camunda流程引擎中,例如: ```java @Service public class ProcessDeploymentService { @Autowired private RepositoryService repositoryService; public void deployProcess() { Deployment deployment = repositoryService.createDeployment() .addClasspathResource("processes/leave.bpmn") .deploy(); System.out.println("Deployed process: " + deployment.getName()); } } ``` 然后,你可以编写一个Java方法来启动这个请假流程,例如: ```java @Service public class LeaveProcessService { @Autowired private RuntimeService runtimeService; public void startProcess(String applicant, int days) { Map<String, Object> variables = new HashMap<>(); variables.put("applicant", applicant); variables.put("days", days); ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("leave", variables); System.out.println("Started process: " + processInstance.getId()); } } ``` 当请假流程中的任务需要被处理时,你可以编写另一个Java方法来处理这个任务,例如: ```java @Service public class LeaveTaskService { @Autowired private TaskService taskService; public void completeTask(String taskId, boolean approved) { Map<String, Object> variables = new HashMap<>(); variables.put("approved", approved); taskService.complete(taskId, variables); System.out.println("Completed task: " + taskId); } } ``` 你还可以编写一些事件监听器来处理流程中的事件,例如流程完成、任务完成等。例如,下面是一个流程完成的事件监听器: ```java @Component public class ProcessCompleteListener implements ExecutionListener { @Override public void notify(DelegateExecution execution) { System.out.println("Process completed: " + execution.getProcessInstanceId()); } } ``` 最后,你需要实现流程的审批、归档和退回功能。例如,你可以添加一个审批任务,当该任务被处理时,流程将继续执行。如果审批被拒绝,你可以使用网关将流程返回到之前的任务或者终止流程。当流程完成时,你可以将流程的结果归档。 以上是一个简单的示例代码,具体实现细节还需要根据你的具体需求来确定。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值