我正在Spring Boot中编写计划的作业(打包为AWS lambda函数),这需要更新多个数据库中的几个表(具有相同的架构,即多租户情况)。
我正在使用AbstractRoutingDataSource
和ThreadLocal
变量作为查找关键字,但是在请求中多次更改查找关键字是行不通的(从SO上的许多答案可以明显看出),即不起作用
TenantContext.setCurrentTenant(tenant1);
process();
TenantContext.setCurrentTenant(tenant2);
process();
我想出的一种解决方法是在其自己的线程中处理每个租户。
void processTenants(List<String> tenants) {
tenants.forEach(this::processTenant);
}
void processTenant(String tenant) {
new Thread(() -> {
TenantContext.setCurrentTenant(tenant);
// Call service to do processing
}).start();
}
现在可以正确更改数据源。
我的问题是这种方法正确吗?有没有我没有考虑过的隐藏警告。
更多信息: