springboot整合activiti6.0.0遇到的坑

在springboot项目中引入依赖:

<dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-spring-boot-starter-basic</artifactId>
            <version>6.0.0</version>
</dependency>
  • 启动报错1:
    org.springframework.beans.factory.BeanCreationException:
    Error creating bean with name ‘requestMappingHandlerMapping’ defined in class path resource [org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$EnableWebMvcConfiguration.class]:
    Invocation of init method failed; nested exception is java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy

这里先放上网上找来的解决办法:
在启动类上排除org.activiti.spring.boot.SecurityAutoConfiguration类

@SpringBootApplication(exclude = {
        org.activiti.spring.boot.SecurityAutoConfiguration.class
})
public class SpringActivitiApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringActivitiApplication.class, args);
    }
}

这里再说下我对这个错误的理解:
找到activiti-spring-boot-starter-basic-6.0.0这个jar包,打开META-INFO路径下的spring.factories
在这里插入图片描述
这个文件包含了activiti的自动配置类
其中最后一个类就是SecurityAutoConfiguration,打开这个类
在这里插入图片描述
可以看到这个类前面有个注解@AutoConfigureBefore({org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration.class})
这说明这个类是一个自动配置类,它会在springboot的security包下面的SecurityAutoConfiguration之前被自动装配。
再到org.springframework.boot.autoconfigure.security路径下寻找SecurityAutoConfiguration类
在这里插入图片描述
看到这里我大概就理解了,2.X版本的springboot已经没有自动装配SecurityAutoConfiguration这个类了。也因此activiti的SecurityAutoConfiguration也无法被自动装配了。于是就爆出了以上的错误。

  • 启动报错2
    Error creating bean with name ‘springProcessEngineConfiguration’ defined in class path resource [org/activiti/spring/boot/DataSourceProcessEngineAutoConfiguration$DataSourceProcessEngineConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.activiti.spring.SpringProcessEngineConfiguration]: Factory method ‘springProcessEngineConfiguration’ threw exception; nested exception is java.io.FileNotFoundException: class path resource [processes/] cannot be resolved to URL because it does not exist

解决方法:
方法1:在application.properties中加上
spring.activiti.check-process-definitions=false
方法2:在resources目录下面新建一个processes包

这个错误就很好理解了,我找到org.activiti.spring.boot路径下的ActivitiProperties
在这里插入图片描述
在这里插入图片描述
这个类是加载activiti相关的配置环境,默认的checkProcessDefinitions是true,也就是说默认会扫描classpath:/processes/包下面的所有的.bpmn20.xml和.bpmn后缀的文件。而项目里没有processes的时候他就会报错。
如果不想把流程文件放processes目录下,只需用spring.activiti.process-definition-location-prefix来修改配置

额外再说几个关于activiti的坑:

  • activiti是自带有mybatis的,如果我们在项目中自己引入mybatis的话就会出现冲突。可以将自己引入的mybatis去掉,或者将activiti中的mybatis依赖去掉
<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>
  • 如果用不到的话就将activiti的异步定时器关掉 spring.activiti.async-executor-activate=false

后期如果还有坑的话我再更新。暂时先end吧

-------------------------------- 这是一条分隔线 ---------------------------------
12月25号更新。
今天看到一个更加简便的springboot和activiti6.0.0整合的办法
我们将引入的依赖改为:

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

然后写一个配置类:

@Configuration
public class ActivitiConf {
    static Logger logger = LoggerFactory.getLogger(ActivitiConf.class);
    /**
    * 这里的数据源改为自己项目中实际的数据源bean对象
    */
    @Autowired
    @Qualifier("sqlserverDS")
    private DataSource yyptDataSource;
    /**
    * 这里的事务管理器改为自己项目中实际的事务管理器bean对象
    */
    @Autowired
    @Qualifier("SqlserverTransactionManager")
    private DataSourceTransactionManager dataSourceTransactionManager;

    @Bean
    public SpringProcessEngineConfiguration springProcessEngineConfiguration(){
        SpringProcessEngineConfiguration spec = new SpringProcessEngineConfiguration();
        spec.setDataSource(yyptDataSource);
        spec.setTransactionManager(dataSourceTransactionManager);
        spec.setDatabaseSchemaUpdate("true");
        Resource[] resources = null;
        // 启动自动部署流程
        try {
            resources = new PathMatchingResourcePatternResolver().getResources("classpath:processes/*.bpmn");
        } catch (IOException e) {
            logger.error(e.toString());
        }
        spec.setDeploymentResources(resources);
        return spec;
    }

    @Bean
    public ProcessEngineFactoryBean processEngine(){
        ProcessEngineFactoryBean processEngineFactoryBean = new ProcessEngineFactoryBean();
        processEngineFactoryBean.setProcessEngineConfiguration(springProcessEngineConfiguration());
        return processEngineFactoryBean;
    }


    @Bean
    public RepositoryService repositoryService() throws Exception{
        return processEngine().getObject().getRepositoryService();
    }
    @Bean
    public RuntimeService runtimeService() throws Exception{
        return processEngine().getObject().getRuntimeService();
    }
    @Bean
    public TaskService taskService() throws Exception{
        return processEngine().getObject().getTaskService();
    }
    @Bean
    public HistoryService historyService() throws Exception{
        return processEngine().getObject().getHistoryService();
    }

    @Bean
    public FormService formService() throws Exception {
        return processEngine().getObject().getFormService();
    }

    @Bean
    public ManagementService managementService() throws Exception {
        return processEngine().getObject().getManagementService();
    }

    public IdentityService identityService() throws Exception {
        return processEngine().getObject().getIdentityService();
    }

}

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值