可通过rest api、web界面或java sdk在camunda/activiti平台上传bpmn xml并启动流程实例:一、单次post部署并启动;二、先部署再按key启动并传变量;三、web界面手动操作;四、java sdk内嵌调用。

如果您已准备就绪一个符合 BPMN 2.0 规范的 XML 文件,并希望在 Camunda 或 Activiti 平台上完成上传并立即启动对应流程实例,则需通过平台提供的 REST API 或 Web 界面执行特定操作。以下是实现该目标的具体方式:
一、使用 REST API 上传 BPMN XML 并启动流程实例
此方法通过单次 HTTP POST 请求将 BPMN XML 内容提交至引擎,同时触发新流程实例的创建。Camunda 支持 /deployment/create 接口接收 XML 并自动部署;Activiti 7+(基于 Spring Boot)也提供类似端点,但需注意版本兼容性与认证配置。
1、构造 POST 请求,目标 URL 为 http://localhost:8080/engine-rest/deployment/create(Camunda 默认地址)或对应 Activiti 的部署端点。
2、设置请求头:Content-Type 为 multipart/form-data,并携带有效 Bearer Token 或 Basic Auth 凭据。
3、在表单字段中添加名为 deployment-name 的文本字段,值为自定义部署名称;再添加名为 bpmn20.xml 的文件字段,值为本地 BPMN XML 文件内容。
4、若需上传后立即启动流程,可在同一请求中追加字段 enableProcessDefinitions 并设为 true,部分 Camunda 版本支持该参数自动激活最新部署的流程定义。
二、先部署再通过流程定义 Key 启动实例
该方式将部署与启动分离,适用于需校验部署结果、获取流程定义 ID 或需指定启动变量的场景。XML 上传后生成可复用的流程定义,后续可通过其唯一 key 调用启动接口。
1、向 /engine-rest/deployment/create 发送仅含 XML 文件的 POST 请求,不附加启动参数。
2、从响应体中提取 id 字段值,即本次部署的唯一标识;再调用 /engine-rest/process-definition 查询最新部署的定义列表,定位目标流程定义的 key 与 version。
3、发起新 POST 请求至 /engine-rest/process-definition/{key}/start,其中 {key} 替换为上一步获取的实际流程定义 key。
4、请求体为 JSON 格式,包含可选的 variables 字段,用于传入启动时所需的流程变量,例如:{"variables":{"applicantName":{"value":"张三","type":"String"}}。
三、通过 Camunda Tasklist 或 Activiti App Web 界面手动上传并启动
适用于开发调试或低频操作场景。Web 界面封装了底层 API 调用逻辑,用户无需编写代码即可完成部署与启动,但无法批量处理或集成至自动化流水线。
1、登录 Camunda Tasklist(默认地址 http://localhost:8080/camunda/app/tasklist/default/)或 Activiti App(如 http://localhost:8080/activiti-app)。
2、导航至“部署”或“流程应用”模块,点击“新建部署”按钮。
3、在文件选择区域拖入或浏览选取本地 BPMN XML 文件,填写部署名称,点击“部署”。
4、部署成功后,在流程定义列表中找到对应条目,点击右侧操作栏中的 “启动流程实例” 按钮,按提示填写启动表单字段或跳过空表单,确认提交。
四、使用 Java SDK 在应用内完成上传与启动
当流程建模与执行嵌入到 Spring Boot 应用中时,可直接调用官方 Java 客户端(Camunda Engine API 或 Activiti Cloud Client),避免 HTTP 层交互开销,提升执行效率与类型安全性。
1、在 Maven 项目中引入 camunda-engine-spring-boot-starter 或 activiti-spring-boot-starter 依赖。
2、注入 RepositoryService 实例,调用 createDeployment().addClasspathResource("process.bpmn").deploy() 完成 XML 部署。
3、获取最新流程定义对象:调用 repositoryService.createProcessDefinitionQuery().processDefinitionKey("myProcess").latestVersion().singleResult()。
4、使用 RuntimeService 启动实例:runtimeService.startProcessInstanceById(processDefinition.getId(), variables),其中 variables 为 Map










