首页 > 其他分享 >activiti流程引擎-流程部署

activiti流程引擎-流程部署

时间:2022-11-18 12:59:30浏览次数:39  
标签:processEngineConfiguration activiti 部署 流程 引擎 deployment RepositoryService

这是对于activiti如何部署流程的一篇博客,希望可以帮助到 刚学习activiti的小伙伴。

定义:将流程设计器的流程 部署到activiti数据库表中 即是流程的部署

如何去做这件事情呢,首先我们必须在bpmn中定义好 我们所需要的流程

 这是一个很常见的一个请假审批流程,项目经理审批之后人事审批,那如何将这个bpmn文件部署到我们的数据库之中去呢

下方代码即可实现部署:

public class ActivitiDemo {
    /**
     * 部署流程定义
     */
    @Test
    public void testDeployment(){
     // 1、创建ProcessEngine
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
     //2、得到RepositoryService实例
        RepositoryService repositoryService = processEngine.getRepositoryService();
     //3、使用RepositoryService进行部署
        Deployment deployment = repositoryService.createDeployment()
                .addClasspathResource("bpmn/evection.bpmn.xml") 
                .addClasspathResource("bpmn/evection.png")
                .name("出差申请流程")
                .deploy();
     //4、输出部署信息
        System.out.println("流程部署id:" + deployment.getId());
        System.out.println("流程部署名称:" + deployment.getName());
    }
}

 我相信很多小伙伴执行完上方代码,会遇到一个processEngine 为空的异常,导致这个问题的原因是没有读取到activiti的act_ge_property表

 

 那竟然确认了原因久很好办了,我们需要先指定好我们的数据库,所以我写了一个类来帮助我们获取ProcessEngine

项目结构:

代码:

import org.activiti.engine.ProcessEngineConfiguration;
import org.activiti.engine.RepositoryService;

/**
 * 关于activiti流程引擎的配置
 * @author shenwang
 */
public class ActivitiSetting {
    public static ProcessEngineConfiguration processEngineConfiguration;
    static {
        processEngineConfiguration = ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();
        //连接数据库的配置
        var url = "jdbc:mysql://localhost:3306/chihiro_activiti?&nullCatalogMeansCurrent=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8&allowMultiQueries=true&allowPublicKeyRetrieval=true";
        processEngineConfiguration.setJdbcDriver("com.mysql.jdbc.Driver");
        processEngineConfiguration.setJdbcUrl(url);
        processEngineConfiguration.setJdbcUsername("root");
        processEngineConfiguration.setJdbcPassword("Lrst123456");
        //表如果不存在 则自动创建表
        processEngineConfiguration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
    }
    public static RepositoryService getRepositoryService(){
        var processEngine = processEngineConfiguration.buildProcessEngine();
       return processEngine.getRepositoryService();
    }
}

 当然关于数据库的信息 还是不能写在代码里面 这样不安全,如果人家反编译你jar包的代码,你的数据库也随之暴露了,大家有时间可以把url这些放在配置文件中,再用@Value这个注解来读取属性的value

这里因为我目前也是在一个学习的阶段所以还有做这一步,后期会去完善,对代码精益求精的同学 可以自己去按照这个思路做一下。

好了,有了上方的这个工具类,我们将测试类的代码重构一下:

   /**
     * 流程部署
     */
    @org.junit.jupiter.api.Test
    public void processDeployment(){
        //得到RepositoryService实列
        var repositoryService = ActivitiSetting.getRepositoryService();
        //使用RepositoryService进行部署
        var deployment = repositoryService.createDeployment()
                .addClasspathResource("bpmn/evecation.bpmn20.xml")
                .addClasspathResource("bpmn/evecation.png")
                .name("请假申请流程")
                .deploy();
        //输出流程部署信息
        System.out.println("流程部署Id:"+deployment.getId());
        System.out.println("流程部署名称:"+deployment.getName());
    }

 看,代码是不是简洁了许多呢,执行一下:

 

 不仅代码中打印了该流程的信息,并且数据库表也要跟着同步,流程模型部署好之后,数据库是会有数据的,我们可以看下面的三张表来看我们是否部署成功。

  • act_re_deployment 流程定义部署表,每部署一次增加一条记录
  • act_re_procdef 流程定义表,部署每个新的流程定义都会在这张表中增加一条记录
  • act_ge_bytearray 流程资源表

好啦,今天的分享就到这里啦,这个写法也是我自己摸索出来的,如果小伙伴有更好的解决方案 欢迎在评论区留言,大家一起学习进步

标签:processEngineConfiguration,activiti,部署,流程,引擎,deployment,RepositoryService
From: https://www.cnblogs.com/javaBoy-ahua/p/16902822.html

相关文章