从Spring Framework重新运行已完成的作业?
我正在使用Spring框架开发一个web应用程序,它在应用程序启动时做一些工作,这些工作主要包括从CSV加载数据并从中生成Java对象。 目前,我正在尝试使用Restlet和Spring框架构建一个restfulapi,其中一个查询应该接受作业名称作为参数并重新启动该作业,即使该作业已标记为已完成,我如何完成作业重新启动?我已经尝试了spring框架的Joboperator接口的startUninstance()方法,还尝试了手动递增JobParameters,以便不存在jobinstancealrradyrunning异常 对于如何在Spring Framework中重新启动标记为已完成的作业,有人有任何代码片段或其他想法吗从Spring Framework重新运行已完成的作业?,spring,restlet,Spring,Restlet,我正在使用Spring框架开发一个web应用程序,它在应用程序启动时做一些工作,这些工作主要包括从CSV加载数据并从中生成Java对象。 目前,我正在尝试使用Restlet和Spring框架构建一个restfulapi,其中一个查询应该接受作业名称作为参数并重新启动该作业,即使该作业已标记为已完成,我如何完成作业重新启动?我已经尝试了spring框架的Joboperator接口的startUninstance()方法,还尝试了手动递增JobParameters,以便不存在jobinstancea
任何帮助都将不胜感激,谢谢 由于您使用的术语,我很确定您使用的是 就批处理而言,您实际上无法重新启动已完成的实例或执行。单个作业实例由作业参数标识。如果需要使用相同的参数再次运行作业,一种方法是在启动之前将一些唯一的参数包括在内,例如
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
}
}
希望有帮助,这里有一些关于这个主题的信息 嗨,非常感谢你的回答。我尝试了上面的代码,但不幸的是,jobRegistry.getJob(jobName)部分即使使用了有效的作业名称也会引发异常。所以,我想看看该怎么办。你看到了什么样的例外?至少你需要确保应用程序上下文中存在JobRegistry和JobLauncher组件。嘿,很抱歉回复太晚。我的JobLauncher配置不正确,所以运行不正常,但我现在可以正常工作了,非常感谢您的帮助!