springboot项目(六)版本不兼容重新整合activity

2025-10-20 10:48:00

1、在我用整合activity版本后整合swagger2的时候,发现spring-boot-starter-web与activiti-spring-boot-starter-basic存在冲突,报如下图错误,多次解决无果后,决定放弃activiti-spring-boot-starter-basic不是很成熟的版本,使用原版的jar包。

springboot项目(六)版本不兼容重新整合activity

2、将pom.xml文件中的

<dependency>


  <groupId>org.activiti</groupId>
  <artifactId>activiti-spring-boot-starter-basic</artifactId>
  <version>6.0.0</version>

替换为

<dependency>


  <groupId>org.activiti</groupId>
  <artifactId>activiti-engine</artifactId>
  <version>6.0.0</version>
</dependency>
<dependency>
  <groupId>org.activiti</groupId>
  <artifactId>activiti-spring</artifactId>
  <version>6.0.0</version>
</dependency>

springboot项目(六)版本不兼容重新整合activity

3、接着我们需要创建两个配置类来初始化activity需要用到的服务;

首先先创建能初始化出ProcessEngine的配置类,代码如下:

import org.activiti.engine.ProcessEngine;


import org.activiti.spring.SpringProcessEngineConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;


import javax.annotation.Resource;
import javax.sql.DataSource;


/**
* Created by 30721 on 2019/7/7.
*/
@Order(1)
@Configuration
public class ProcessEngineConfiguration extends SpringProcessEngineConfiguration {


   @Resource
   private DataSource dataSource;


   @Resource
   private DataSourceTransactionManager dataSourceTransactionManager;


   @Bean(name = "processEngine")
   public ProcessEngine initProcessEngine() {
       super.setDataSource(dataSource);
       super.setTransactionManager(dataSourceTransactionManager);
       super.setDatabaseSchemaUpdate("true");
       ProcessEngine processEngine = super.buildProcessEngine();
       return processEngine;
   }


}

springboot项目(六)版本不兼容重新整合activity

4、接着创建能够初始化流程引擎常用到的服务类的配置类,代码如下:

import org.activiti.engine.*;


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;


import javax.annotation.Resource;


/**
* Created by 30721 on 2019/7/7.
*/
@Order(2)
@Configuration
public class ActivityServiceConfig {


   @Autowired
   private ProcessEngine engine;


   //管理流程定义的相关操作(部署,查询,删除等)
   @Bean
   public RepositoryService repositoryService() {
       return engine.getRepositoryService();
   }


   //管理执行的,流程实例的管理操作,一次具体执行的信息,包括启动、推进、删除Execution等操作
   @Bean
   public RuntimeService runtimeService() {
       return engine.getRuntimeService();
   }


   //管理任务的(查询任务,办理任务)
   @Bean
   public TaskService taskService() {
       return engine.getTaskService();
   }


   //管理历史的数据(执行完的数据管理,主要是查询)大家都在发
   @Bean
   public HistoryService historyService() {
       return engine.getHistoryService();
   }



}

springboot项目(六)版本不兼容重新整合activity

5、为何要将两个类加入@Order呢?这是因为这两个类存在先后加载问题,只有ProcessEngineConfiguration加载完,并注入ProcessEngine的bean,配置类中的@Autowired private ProcessEngine engine;代码才会生效

6、测试代码沿用了Springboot项目(三)的测试代码,代码如下:

@Test


   public void test() {
//        RepositoryService repositoryService = engine.getRepositoryService();
//    // 部署流程文件
//        repositoryService.createDeployment()
//                .addClasspathResource("processes/First.bpmn").deploy();
       // 启动流程
     ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("process1");
     // 查询第一个任务
     Task task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult();
     System.out.println("当前节点名称" + task.getName());
     // 完成第一个任务
     taskService.complete(task.getId());
     task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult();
     System.out.println("流程结束后,查找任务:" + task);
     engine.close();
     System.out.println("================================================");
   }

注意点:我为何要将//        RepositoryService repositoryService = engine.getRepositoryService();


//    // 部署流程文件
//        repositoryService.createDeployment()
//                .addClasspathResource("processes/First.bpmn").deploy();

这些代码给注释掉呢?是因为我在Springboot项目(三)中已经部署过这个流程文件了,所以不需要重新部署了,如果还没有部署就需要将这三行代码解除注释

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢