这是对于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