activiti 6.7.2 智能切换tenantId
时间: 2024-03-05 10:54:23 浏览: 19
在 Activiti 6.7.2 中,可以通过实现 TenantInfoHolder 接口来智能切换 Tenant Id。TenantInfoHolder 接口定义了两个方法:
- void setCurrentTenantId(String tenantId):设置当前租户的标识符。
- String getCurrentTenantId():获取当前租户的标识符。
通过实现 TenantInfoHolder 接口,我们可以在运行时动态切换当前租户的标识符。具体来说,你可以按照以下步骤实现 TenantInfoHolder 接口:
1. 创建一个类,实现 TenantInfoHolder 接口。
```java
public class MyTenantInfoHolder implements TenantInfoHolder {
private static final ThreadLocal<String> currentTenantId = new ThreadLocal<>();
@Override
public void setCurrentTenantId(String tenantId) {
currentTenantId.set(tenantId);
}
@Override
public String getCurrentTenantId() {
return currentTenantId.get();
}
}
```
在上述代码中,我们使用 ThreadLocal 将当前租户的标识符保存在当前线程中,以确保线程安全。如果你的系统是单线程的,也可以直接使用一个成员变量来保存当前租户的标识符。
2. 将该类注册到 Activiti 引擎中。
```java
ProcessEngineConfiguration config = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml");
config.setTenantInfoHolder(new MyTenantInfoHolder());
ProcessEngine engine = config.buildProcessEngine();
```
在上述代码中,我们将 MyTenantInfoHolder 类注册到 Activiti 引擎中,并设置为引擎的 Tenant Info Holder。这样,当需要切换当前租户的标识符时,就可以调用 MyTenantInfoHolder.setCurrentTenantId() 方法设置当前租户的标识符,Activiti 就会自动将其赋值给相应的实体对象的 Tenant Id 字段。
需要注意的是,如果你的系统不需要动态切换当前租户的标识符,可以不实现 TenantInfoHolder 接口。此时,Activiti 会将所有实体对象的 Tenant Id 字段设置为 null。