Flowable进阶学习(二)流程部署的深入解析
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
文章目录
一、流程部署涉及表及其结构
1. 部署流程代码示例
- 设计俩个流程并压缩成zip包。
- 代码
package com.hx;
import org.flowable.engine.*;
import org.flowable.engine.impl.cfg.StandaloneInMemProcessEngineConfiguration;
import org.flowable.engine.repository.Deployment;
import org.junit.Before;
import org.junit.Test;
import java.io.InputStream;
import java.util.zip.ZipInputStream;
public class Test4_ProcessDeploy {
ProcessEngineConfiguration configuration = null;
ProcessEngine processEngine = null;
@Before
public void before() {
configuration = new StandaloneInMemProcessEngineConfiguration();
configuration.setJdbcDriver("com.mysql.cj.jdbc.Driver");
configuration.setJdbcUsername("root");
configuration.setJdbcPassword("admin");
configuration.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/flowable_learn?useSSL=false&serverTimezone=UTC");
configuration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
processEngine = configuration.buildProcessEngine();
}
@Test
public void test1_deploy(){
RepositoryService repositoryService = processEngine.getRepositoryService();
InputStream ins = this.getClass().getClassLoader().getResourceAsStream("holidayAndProcess.zip");
ZipInputStream zipIns = new ZipInputStream(ins);
Deployment deploy = repositoryService.createDeployment()
.addZipInputStream(zipIns)
.name("请假流程")
.category("请假")
.tenantId("whx")
.deploy();
System.out.println("deploy.getId() = " + deploy.getId());
System.out.println("deploy.getName() = " + deploy.getName());
System.out.println("deploy.getCategory() = " + deploy.getCategory());
}
}
- 测试运行结果
2. 流程部署所涉及表
查看表结构与数据变动其中ACT_RE_DEPLOYMENT的一条记录可以对应ACT_RE_PROCDEF的多条记录
3. 流程部署涉及表的结构、字段解析
- 流程部署表ACT_RE_DEPLOYMENT
字段 | 含义与注释 |
---|
ID_ | 主键 |
NAME_ | 名称 |
CATEGORY_ | 分类 |
KEY_ | |
TENANT_ID_ | 租户ID |
DEPLOY_TIME_ | 部署事件 |
DERIVED_FROM_ | 来源于 |
DERIVED_FROM_ROOT_ | 来源于 |
ENGINE_VERSION_ | 引擎版本号 |
2. 流程定义表ACT_RE_PROCDEF
Name | Value |
---|
ID_ | 自动生成的ID |
REV_ | 1 |
CATEGORY_ | 流程定义的namespace |
NAME_ | 每个流程的名称 |
KEY_ | 自己定义的ID |
VERSION_ | 1 |
DEPLOYMENT_ID_ | 部署关联的ID |
RESOURCE_NAME_ | 资源名称 |
DGRM_RESOURCE_NAME_ | 图片 |
DESCRIPTION_ | MyHolidayUI请假流程 |
HAS_START_FORM_KEY_ | 0 |
HAS_GRAPHICAL_NOTATION_ | 1 |
SUSPENSION_STATE_ | 当前流程的状态1正常2挂起 |
TENANT_ID_ | 租户ID。可关联用户。 |
ENGINE_VERSION_ | |
DERIVED_FROM_ | |
DERIVED_FROM_ROOT_ | |
DERIVED_VERSION_ | 0 |
- 部署资源表ACT_GE_BYTEARRAY
字段 | 含义及备注 |
---|
ID_ | 主键 |
REV_ | 版本号 |
NAME_ | 部署的文件名称如MyProcess.bpmn20.xml |
DEPLOYMENT_ID_ | 部署ID |
BYTES_ | 字节二进制数据 |
GENERATED_ | 是否系统生成。 0为用户上传1为系统生成。比如系统会自动根据xml生成png文件 |
二、流程部署中数据的存储的过程
protected Deployment executeDeploy(CommandContext commandContext) {
if (this.deploymentBuilder.isDuplicateFilterEnabled()) {
}
deployment.setNew(true);
CommandContextUtil.getDeploymentEntityManager(commandContext).insert(deployment);
processEngineConfiguration.getDeploymentManager().deploy(deployment, deploymentSettings);
return deployment;
}
@Override
public void insert(DeploymentEntity deployment) {
insert(deployment, false);
for (EngineResource resource : deployment.getResources().values()) {
resource.setDeploymentId(deployment.getId());
getResourceEntityManager().insert((ResourceEntity) resource);
}
}
public void deploy(DeploymentEntity deployment, Map<String, Object> deploymentSettings) {
for (EngineDeployer deployer : deployers) {
deployer.deploy(deployment, deploymentSettings);
}
}