Java Camunda在启动共享进程定义时设置租户id

Java Camunda在启动共享进程定义时设置租户id,java,bpmn,camunda,Java,Bpmn,Camunda,当流程定义本身在多个租户之间共享时,是否可以设置租户id 我调用这个方法,从http请求中获取两个id,然后将其传递给嵌入式进程引擎 public void startInstance(String processDefinitionId, String tenantId) { this.runtimeService.startProcessInstanceById(processDefinitionId); } 但是使用此方法,我无法将租户id传递给流程实例。我如何做

当流程定义本身在多个租户之间共享时,是否可以设置租户id

我调用这个方法,从http请求中获取两个id,然后将其传递给嵌入式进程引擎

public void startInstance(String processDefinitionId, String tenantId) {
        this.runtimeService.startProcessInstanceById(processDefinitionId);
    }
但是使用此方法,我无法将租户id传递给流程实例。我如何做到这一点


我发现这一点:但这并不能真正解决我的问题,因为我从http头获取租户id。

感谢Jan的评论,我发现可以将租户id作为变量添加到启动的实例中,并在
租户Provider中检索它

代码如下所示

runtimeService.createProcessInstanceById(processDefinitionId).setVariable("tenantId", tenantId).execute();
在租户Provider上,只需像这样获取此变量

public class TenantProvider implements TenantIdProvider {

    @Override
    public String provideTenantIdForProcessInstance(TenantIdProviderProcessInstanceContext ctx) {
        return (String) ctx.getVariables().get("tenantId");
    }

    @Override
    public String provideTenantIdForCaseInstance(TenantIdProviderCaseInstanceContext ctx) {
        return (String) ctx.getVariables().get("tenantId");
    }

    @Override
    public String provideTenantIdForHistoricDecisionInstance(TenantIdProviderHistoricDecisionInstanceContext ctx) {
        return (String) ctx.getExecution().getVariable("tenantId");
    }
}
要启用租户Provider,请按如下方式启动发动机

ProcessEngine engine = new StandaloneProcessEngineConfiguration()
                .setTenantIdProvider(new TenantProvider())
                ...
                .buildProcessEngine();

我不会放弃TenantProvider方法,我可以想象多种方式(threadLocal上下文、prototype作用域bean等)将您当前的请求详细信息放入提供程序,这样您就可以从那里动态返回租户。谢谢。实际上,我通过使用
.setVariable(“tenantId”,tenantId)
启动流程实例时添加一个变量,然后在我的
TenantProvider
中检索该变量,从而解决了这个问题。也许您可以回答自己的问题来分享您是如何解决这个问题的?我可能有一个类似的用例:-)