请求中的Spring Boot切换数据源

时间:2018-06-20 05:26:59

标签: spring spring-boot

我正在Spring Boot中编写计划的作业(打包为AWS lambda函数),这需要更新多个数据库中的几个表(具有相同的架构,即多租户情况)。

我正在使用AbstractRoutingDataSourceThreadLocal变量作为查找关键字,但是在请求中多次更改查找关键字是行不通的(从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();
}

现在可以正确更改数据源。

我的问题是这种方法正确吗?有没有我没有考虑过的隐藏警告。

更多信息:

  • 这将作为AWS lambda函数被调用,因此将仅处理一个 请求
  • 我知道我可以调用多个lambda,每个租户一个,但是我想使用上述方法

0 个答案:

没有答案