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、接着我们需要创建两个配置类来初始化activ坡纠课柩ity需要用到的服务;首先先创建能初始化出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)@Configurationpublic 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)@Configurationpublic 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 publ坡纠课柩ic 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项目(三)中已经部署过这个流程文件了,所以不需要重新部署了,如果还没有部署就需要将这三行代码解除注释