Spring boot整合activiti

作者: 指下光年 | 来源:发表于2021-06-11 18:23 被阅读0次
    • spring boot 整合 activiti

    1. 创建一个spring boot项目。
    2. pom文件中加入以下依赖:
    <!--activiti-->
            <dependency>
                <groupId>org.activiti</groupId>
                <artifactId>activiti-spring</artifactId>
                <version>6.0.0</version>
            </dependency>
    
    1. 创建config,项目运行将创建activiti所需要的表
    package com.example.activite.config;
    
    import org.activiti.engine.*;
    import org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration;
    import org.activiti.spring.ProcessEngineFactoryBean;
    import org.activiti.spring.SpringProcessEngineConfiguration;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.core.io.Resource;
    import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
    import org.springframework.core.io.support.ResourcePatternResolver;
    import org.springframework.transaction.PlatformTransactionManager;
    
    import javax.sql.DataSource;
    import java.io.IOException;
    
    @Configuration
    public class ActivitiConfig {
        @Autowired
        private DataSource dataSource;
        @Autowired
        private PlatformTransactionManager platformTransactionManager;
    
        @Bean
        public SpringProcessEngineConfiguration springProcessEngineConfiguration(){
            SpringProcessEngineConfiguration spec = new SpringProcessEngineConfiguration();
            spec.setDataSource(dataSource);
            spec.setTransactionManager(platformTransactionManager);
            spec.setDatabaseSchemaUpdate("true");
            Resource[] resources = null;
            // 启动自动部署流程
            try {
                resources = new PathMatchingResourcePatternResolver().getResources("classpath*:processes/*.xml");
            } catch (IOException e) {
                e.printStackTrace();
            }
            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();
        }
    }
    
    
    1. 主启动类注解:
    @SpringBootApplication(exclude = SecurityAutoConfiguration.class)
    
    1. resource下创建一个文件夹用来存放流程文件


      目录结构
    2. 启动项目,查看数据库是否创建表,这样就整合好了。


      数据库表
    • 整合过程中遇到的问题

    • 我的项目用的是mybatis-plus,而activiti使用的是mybatis,或者是自己的mybatis与activiti的mybatis版本冲突。
      解决办法:
    # 排除activiti的mybatis,使用自己项目的mybatis
            <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>
    
    • 部署流程的时候出现空指针.
      下面是我的测试用例
    //部署流程
        @org.junit.jupiter.api.Test
        public void deployment() {
          //1.创建ProcessEngine对象
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //2.得到RepositoryService实例
            RepositoryService repositoryService = processEngine.getRepositoryService();
            //3.进行部署
            Deployment deployment = repositoryService.createDeployment()
                    .addClasspathResource("processes/firstProcess.xml")       // bpmn文件
                    .addClasspathResource("processes/firstProcess.png")      // 图片文件
                    .name("请假申请单流程")
                    .deploy();
    
            System.out.println("流程部署id:" + deployment.getId());
            System.out.println("流程部署名称:" + deployment.getName());
        }
    

    解决方法:在保证项目正常启动的情况下如果还出现空指针,那就可能是缺少了上面的第三点(不要用main方法测试)

    • 启动报错Error creating bean with name 'processEngine'
      主要原因是:在act_ge_property表中的数据被清除了、使用demo类再次 部署流程定义后。或者把表全删了,重新创建。

    activiti 的部署 启动(单元测试)

    1. 部署
    package org.activiti.engine;
    
    import com.example.activite.SpringbootActivitiApplication;
    import org.activiti.engine.repository.Deployment;
    import org.junit.runner.RunWith;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.test.context.junit4.SpringRunner;
    
    @SpringBootTest(classes = SpringbootActivitiApplication.class)
    @RunWith(SpringRunner.class)
    public class Test {
    
        @org.junit.jupiter.api.Test
        public void buShu(){
            //1.创建ProcessEngine对象
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //2.得到RepositoryService实例
            RepositoryService repositoryService = processEngine.getRepositoryService();
            //3.进行部署
            Deployment deployment = repositoryService.createDeployment()
                    .addClasspathResource("processes/firstProcess.xml")       // bpmn文件
                    .addClasspathResource("processes/firstProcess.png")      // 图片文件
                    .name("请假申请单流程")
                    .deploy();
            System.out.println("流程部署id:" + deployment.getId());
            System.out.println("流程部署名称:" + deployment.getName());
        }
    
    }
    

    部署成功


    image.png

    相关文章

      网友评论

        本文标题:Spring boot整合activiti

        本文链接:https://www.haomeiwen.com/subject/sazseltx.html