【问题标题】:Multi-tenant job repository in spring-batchspring-batch 中的多租户作业存储库
【发布时间】:2015-09-29 19:39:47
【问题描述】:

我的系统支持多租户,直到现在每个租户都有自己的作业存储库(即在特定于租户的架构下)。 这意味着“myJob”可以为租户 X 和租户 Y 执行,并且可以毫无风险地共享。

执行作业时,它会解析所有参数。这些参数是根据同一作业的最后一次执行(包括租户 ID)来解析的。 我使用 SimpleJobOperator.startNextInstance 的方法,它也用于我的工作。

//Find the last execution
List<JobInstance> lastInstances = jobExplorer.getJobInstances(jobName, 0, 1); 
//get the parameters of the last execution
lastInstances.get(0).getJobParameters()

现在提出了一个新要求,所有租户都应维护共享单个数据库模式的作业存储库。这将破坏上面的解决方案,因为我们不确定最后一个实例是否属于当前租户。
一个简单的解决方案是:

List<JobInstance> lastInstances = jobExplorer.getJobInstances(jobName,0,Integer.MAX_VALUE);
for (JobInstance jobInstance : instances) {
        if(jobInstance.getJobParameters().getString("TENANT_ID")
          .equals(currentTenant)){
            tenantLastJobInstance = jobInstance;
            break;
        }
}

这种丑陋且低效的解决方案,我试图避免上述情况。

理想的解决方案是 myJob 将充当模板并命名实际工作 基于租户,例如myJob+TenantId 的一些变体(myJobX 和 myJobY)。

  • 欢迎任何关于如何实施这种方法的想法
  • 也欢迎任何创建多租户的替代方法。

【问题讨论】:

  • 你能分享一个你第一种方法的例子吗?我在设置租户特定的春季批次时遇到问题。
  • 最新版本似乎无法直接从JobInstance对象获取作业参数。

标签: spring spring-batch multi-tenant


【解决方案1】:

在我的脑海中(我没有考虑太多)我建议扩展 SimpleJobExplorer 并添加一个自定义方法来根据租户 ID 进行查询。虽然它让您远离“标准”实现,但它是解决需求的最简单方法恕我直言。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-10
    相关资源
    最近更新 更多