public class TenantBroker extends Object
void methodA(){
// 因为某些特殊原因,需要手动指定租户
TenantContextHolder.setTenantNo(1);
// do something ...
}
void methodB(){
// 因为某些特殊原因,需要手动指定租户
TenantContextHolder.setTenantNo(2);
methodA();
// 此时租户ID已经变成 1
// do something ...
}
嵌套设置租户ID会导致租户上下文难以维护,并且很难察觉,容易导致数据错乱。 推荐的写法:
void methodA(){
TenantBroker.RunAs(1,() -> {
// do something ...
});
}
void methodB(){
TenantBroker.RunAs(2,() -> {
methodA();
// do something ...
});
}
| 限定符和类型 | 类和说明 |
|---|---|
static interface |
TenantBroker.ApplyAs<T,R> |
static interface |
TenantBroker.RunAs<T> |
static class |
TenantBroker.TenantBrokerExceptionWrapper |
| 构造器和说明 |
|---|
TenantBroker() |
| 限定符和类型 | 方法和说明 |
|---|---|
<T> T |
applyAs(String tenantNo,
TenantBroker.ApplyAs<String,T> func)
以某个租户的身份运行
|
<T> T |
applyAs(Supplier<String> supplier,
TenantBroker.ApplyAs<String,T> func)
以某个租户的身份运行
|
void |
runAs(String tenantNo,
TenantBroker.RunAs<String> func)
以某个租户的身份运行
|
void |
runAs(Supplier<String> supplier,
TenantBroker.RunAs<String> func)
以某个租户的身份运行
|
public void runAs(String tenantNo, TenantBroker.RunAs<String> func)
tenantNo - 租户IDfunc - public <T> T applyAs(String tenantNo, TenantBroker.ApplyAs<String,T> func)
T - 返回数据类型tenantNo - 租户IDfunc - public void runAs(Supplier<String> supplier, TenantBroker.RunAs<String> func)
supplier - func - public <T> T applyAs(Supplier<String> supplier, TenantBroker.ApplyAs<String,T> func)
T - 返回数据类型supplier - func - Copyright © 2020. All rights reserved.