具有计划任务的SpringBoot多租户应用

时间:2019-12-09 21:13:53

标签: spring hibernate spring-boot jpa multi-tenant

我有一个多租户应用程序,客户可以在其中提交其订单(JSON有效负载),该订单必须离线处理。我们正在使用每个租户策略的数据库,并且配置工作正常。但是,对于本示例中的异步处理,我们陷入了困境。客户提交有效负载后,会将其保存到表中。我们要运行一个计划任务,该任务可以读取此表并处理其中的订单。

我们尝试了类似的事情:

@Scheduled(fixedRate = 60000)
    public void doSomething() {
        TenantDataSource tenantDataSource = context.getBean(TenantDataSource.class);
        Set<String> tenants = tenantDataSource.getAll().keySet();
        tenants.forEach(tenant -> {
            MDC.setContext(new CallContext().setTenantId(tenant));
            context.getBean(JobService.class).listJobs();
        });
    }

但这仍然会在master数据库中而不是在租户特定数据库中查找作业。

有指针吗?

1 个答案:

答案 0 :(得分:0)

确保doSomething()方法不是事务性的,因为transactional会创建自己的拦截器,而不是调查解析器。