Spring-batch中的多租户作业存储库

时间:2014-05-08 13:38:47

标签: spring spring-batch multi-tenant

我的系统支持多租户,直到现在每个租户都有自己的作业存储库(即在租户特定架构下)。 意思是“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)。

  • 欢迎任何有关如何实施此方法的想法
  • 我们也欢迎任何创建多租户的替代方法。

1 个答案:

答案 0 :(得分:1)

脱离我的头脑(我还没有考虑过这个问题)我建议扩展SimpleJobExplorer并根据租户ID添加自定义方法进行查询。虽然它会让你远离&#34;标准&#34;实施一点,这将是解决恕我直言的最简单方法。