Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Spring Framework重新运行已完成的作业?_Spring_Restlet - Fatal编程技术网

从Spring Framework重新运行已完成的作业?

从Spring Framework重新运行已完成的作业?,spring,restlet,Spring,Restlet,我正在使用Spring框架开发一个web应用程序,它在应用程序启动时做一些工作,这些工作主要包括从CSV加载数据并从中生成Java对象。 目前,我正在尝试使用Restlet和Spring框架构建一个restfulapi,其中一个查询应该接受作业名称作为参数并重新启动该作业,即使该作业已标记为已完成,我如何完成作业重新启动?我已经尝试了spring框架的Joboperator接口的startUninstance()方法,还尝试了手动递增JobParameters,以便不存在jobinstancea

我正在使用Spring框架开发一个web应用程序,它在应用程序启动时做一些工作,这些工作主要包括从CSV加载数据并从中生成Java对象。 目前,我正在尝试使用Restlet和Spring框架构建一个restfulapi,其中一个查询应该接受作业名称作为参数并重新启动该作业,即使该作业已标记为已完成,我如何完成作业重新启动?我已经尝试了spring框架的Joboperator接口的startUninstance()方法,还尝试了手动递增JobParameters,以便不存在jobinstancealrradyrunning异常

对于如何在Spring Framework中重新启动标记为已完成的作业,有人有任何代码片段或其他想法吗


任何帮助都将不胜感激,谢谢

由于您使用的术语,我很确定您使用的是

就批处理而言,您实际上无法重新启动已完成的实例或执行。单个作业实例由作业参数标识。如果需要使用相同的参数再次运行作业,一种方法是在启动之前将一些唯一的参数包括在内,例如
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配置不正确,所以运行不正常,但我现在可以正常工作了,非常感谢您的帮助!