从 Spring 框架重新运行已完成的作业?
Rerunning a completed Job from Spring Framework?
我正在使用 Spring 框架开发 Web 应用程序,该框架在应用程序启动时执行一些工作,这些工作主要包括从 CSV 加载数据并从中创建 Java 对象。
目前,我正在尝试使用 Restlet 和 Spring 框架构建 RESTful API 并且其中一个查询应该将作业名称作为参数并重新启动该作业,即使该作业已标记为已完成,我如何完成作业重启?我已经尝试了 spring 框架的 Joboperator 接口的 startNextInstance() 方法并且还尝试手动增加 JobParameters 以便没有 jobinstancealrradyrunning 异常?
有人对如何在 Spring 框架中重新启动标记为已完成的作业有任何代码片段或替代想法吗?
任何帮助将不胜感激,谢谢!!
由于您使用的条款,我很确定您使用的是 Spring Batch
在 Batch 术语中,您实际上无法重新启动已完成的实例或执行。单个作业实例由作业参数标识。如果您需要使用相同的参数再次 运行 作业,一种方法是包含一些独特的参数,例如启动前 JobParameters
的当前时间戳。
因此,重新启动 一个已完成的作业将意味着启动一个具有相似参数的作业的新实例。这是我之前使用过的一个稍微修改过的片段,它使用 JobLauncher
和 JobRegistry
按名称启动新作业:
@Autowired
@Qualifier("asyncJobLauncher")
private JobLauncher asyncJobLauncher;
@Autowired
private JobRegistry jobRegistry;
...
public JobExecution startJob(String jobName) {
Job job;
try {
job = jobRegistry.getJob(jobName);
} catch (NoSuchJobException e) {
// handle invalid job name
}
JobParametersBuilder jobParams = new JobParametersBuilder();
jobParams.addLong("currentTime", System.currentTimeMillis());
// add other relevant parameters
try {
JobExecution jobExecution = asyncJobLauncher.run(job, jobParams.toJobParameters());
return jobExecution;
} catch (JobExecutionAlreadyRunningException e) {
// handle instance already running with given params
} catch (Exception e) {
// handle other errors
}
}
希望对您有所帮助,以下是关于该主题的一些 reading。
我正在使用 Spring 框架开发 Web 应用程序,该框架在应用程序启动时执行一些工作,这些工作主要包括从 CSV 加载数据并从中创建 Java 对象。 目前,我正在尝试使用 Restlet 和 Spring 框架构建 RESTful API 并且其中一个查询应该将作业名称作为参数并重新启动该作业,即使该作业已标记为已完成,我如何完成作业重启?我已经尝试了 spring 框架的 Joboperator 接口的 startNextInstance() 方法并且还尝试手动增加 JobParameters 以便没有 jobinstancealrradyrunning 异常?
有人对如何在 Spring 框架中重新启动标记为已完成的作业有任何代码片段或替代想法吗?
任何帮助将不胜感激,谢谢!!
由于您使用的条款,我很确定您使用的是 Spring Batch
在 Batch 术语中,您实际上无法重新启动已完成的实例或执行。单个作业实例由作业参数标识。如果您需要使用相同的参数再次 运行 作业,一种方法是包含一些独特的参数,例如启动前 JobParameters
的当前时间戳。
因此,重新启动 一个已完成的作业将意味着启动一个具有相似参数的作业的新实例。这是我之前使用过的一个稍微修改过的片段,它使用 JobLauncher
和 JobRegistry
按名称启动新作业:
@Autowired
@Qualifier("asyncJobLauncher")
private JobLauncher asyncJobLauncher;
@Autowired
private JobRegistry jobRegistry;
...
public JobExecution startJob(String jobName) {
Job job;
try {
job = jobRegistry.getJob(jobName);
} catch (NoSuchJobException e) {
// handle invalid job name
}
JobParametersBuilder jobParams = new JobParametersBuilder();
jobParams.addLong("currentTime", System.currentTimeMillis());
// add other relevant parameters
try {
JobExecution jobExecution = asyncJobLauncher.run(job, jobParams.toJobParameters());
return jobExecution;
} catch (JobExecutionAlreadyRunningException e) {
// handle instance already running with given params
} catch (Exception e) {
// handle other errors
}
}
希望对您有所帮助,以下是关于该主题的一些 reading。