activiti这块骨头终于啃完了,然而刚从坑里爬出来,又一个大坑等着我,在和SprigBoot2+MybatisPlus+activiti6整合时,有一出现了问题,浪费了一个上午终于把它解决了,在这里做个记录。
MybatisPlus+Activiti6
用MybatisPlus和activiti整合也出现了问题,真的是头大。刚开始以为版本冲突,还了好多版本都不行,最后得出的结论是因为mybatisplus,要求用mybatis3.4.6,而activiti用的是mybatis3.4.2,两边有冲突。
解决办法:将activiti中排除掉
第一种
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter-basic</artifactId>
<version>6.0.0</version>
<exclusions>
<exclusion>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
</exclusion>
</exclusions>
</dependency>
第二种
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-engine</artifactId>
<version>6.0.0</version>
<exclusions>
<exclusion>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring</artifactId>
<version>6.0.0</version>
</dependency>
SpringBoot2+Activiti6
关于他俩整合相关文档太多,得益于这篇博客,让我我少走很多弯路
https://blog.csdn.net/qq_22849235/article/details/100015752
首先他俩整合,两种方式
第一种方式
<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>
这个如果你用的时mybatis时没有问题的,它需要写一个配置文件,会在你启动项目时,加载上面的配置类,会自动检测数据库中是否存在activiti数据库表结构,如果不存在,则自动创建表并执行初始化部署流程;若已有activiti表结构,则只执行初始化部署流程操作。
配置类我就粘上了,省的找(数据源自己配)
import org.activiti.engine.*;
import org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.ResourcePatternResolver;
import javax.sql.DataSource;
import java.io.IOException;
@Configuration
public class ActivitiConfig {
@Autowired
private DataSource dataSource;
@Autowired
private ResourcePatternResolver resourceLoader;
/**
* 初始化配置,将创建28张表
* @return
*/
@Bean
public StandaloneProcessEngineConfiguration processEngineConfiguration() {
StandaloneProcessEngineConfiguration configuration = new StandaloneProcessEngineConfiguration();
configuration.setDataSource(dataSource);
configuration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
configuration.setAsyncExecutorActivate(false);
return configuration;
}
@Bean
public ProcessEngine processEngine() {
return processEngineConfiguration().buildProcessEngine();
}
@Bean
public RepositoryService repositoryService() {
return processEngine().getRepositoryService();
}
@Bean
public RuntimeService runtimeService() {
return processEngine().getRuntimeService();
}
@Bean
public TaskService taskService() {
return processEngine().getTaskService();
}
}
第二种方式
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter-basic</artifactId>
<version>6.0.0</version>
</dependency>
关于这种方式相关博客好多,但是我用了不起作用,不知是何种原因可能我用的时mybatisplus?不纠结这个。
关于这种方式整合出现问题是因为activiti6.0.0出来的时候springboot2.0还没有出来,activiti6.0.0 支持springboot1.2.6以上,2.0.0以下的版本。
报的那个错分析完实际上是ClassNotFound,说是准确来说是spring boot2把一些类的package改了:
spring boot 1里类名是:
org.springframework.boot.actuate.autoconfigure.EndpointAutoConfiguration
spring boot 2里类名是:
org.springframework.boot.actuate.autoconfigure.endpoint.EndpointAutoConfiguration
解决办法:
1,在启动类上将这个排除掉就行了
@SpringBootApplication(exclude = SecurityAutoConfiguration.class)
2,将SpringBoot版本降低到1.x版本
3,修改源码的集成问题,重新编译
SpringBoot2+MybatisPlus+Activiti6
最后我用的完整依赖组合:
SpringBoot
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
mybatisPlus
<!--mybatisplus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.1.1</version>
</dependency>
<!--添加 代码生成器 依赖-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.1.1</version>
</dependency>
<!--模板引擎 freemarker-->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.28</version>
</dependency>
activiti
<!--activiti-->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-engine</artifactId>
<version>6.0.0</version>
<exclusions>
<exclusion>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring</artifactId>
<version>6.0.0</version>
</dependency>