spring批处理中的多租户作业存储库
我的系统支持多租户,到目前为止,每个租户都有自己的作业存储库(即在特定于租户的架构下)。 意思是“myJob”可以为租户X和租户Y执行,并且可以在没有任何风险的情况下共享 执行作业时,它会解析所有参数。参数基于同一作业(包括租户Id)的最后一次执行进行解析。 我已经从SimpleJoboOperator.startNumeristance获得了这种方法,它也用于我的工作spring批处理中的多租户作业存储库,spring,spring-batch,multi-tenant,Spring,Spring Batch,Multi Tenant,我的系统支持多租户,到目前为止,每个租户都有自己的作业存储库(即在特定于租户的架构下)。 意思是“myJob”可以为租户X和租户Y执行,并且可以在没有任何风险的情况下共享 执行作业时,它会解析所有参数。参数基于同一作业(包括租户Id)的最后一次执行进行解析。 我已经从SimpleJoboOperator.startNumeristance获得了这种方法,它也用于我的工作 //Find the last execution List<JobInstance> lastInstances
//Find the last execution
List<JobInstance> lastInstances = jobExplorer.getJobInstances(jobName, 0, 1);
//get the parameters of the last execution
lastInstances.get(0).getJobParameters()
//查找最后一次执行
List lastInstances=jobExplorer.getJobInstances(jobName,0,1);
//获取上次执行的参数
lastInstances.get(0).getJobParameters()
现在提出了一个新的要求,所有租户都应该维护共享单个db模式的作业存储库。这将破坏上述解决方案,因为我们不确定最后一个实例是否属于当前租户。天真的解决方法是:
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;
}
}
List lastInstances=jobExplorer.getJobInstances(jobName,0,Integer.MAX_值);
例如(JobInstance JobInstance:instances){
if(jobInstance.getJobParameters().getString(“租户ID”)
.equals(当前租户)){
tenantLastJobInstance=jobInstance;
打破
}
}
这是一个丑陋且低效的解决方案,我正试图避免上述情况
理想的解决方案是myJob作为模板,并命名为实际的job
基于租户,例如myJob+TenantId的一些变体(myJobX和myJobY)
- 任何关于如何实施这种方法的想法都将受到欢迎
- 任何创建多租户的替代方法也将受到欢迎李>
JobInstance
对象获取作业参数。