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

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>

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;
}
}

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();
}
}

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。
阅读量:47
阅读量:83
阅读量:170
阅读量:145
阅读量:121