我的系统支持多租户,直到现在每个租户都有自己的作业存储库(即在租户特定架构下)。 意思是“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)。
答案 0 :(得分:1)
脱离我的头脑(我还没有考虑过这个问题)我建议扩展SimpleJobExplorer并根据租户ID添加自定义方法进行查询。虽然它会让你远离&#34;标准&#34;实施一点,这将是解决恕我直言的最简单方法。