【问题标题】:Rerunning a completed Job from Spring Framework?从 Spring Framework 重新运行已完成的作业?
【发布时间】:2016-07-06 14:26:48
【问题描述】:

我正在使用 Spring Framework 开发一个 Web 应用程序,它在应用程序启动时执行一些工作,这些工作主要包括从 CSV 加载数据并从中生成 Java 对象。 目前,我正在尝试使用 Restlet 和 Spring 框架构建一个 RESTful API,其中一个查询应该将作业名称作为参数并重新启动该作业,即使该作业已被标记为 COMPLETED,我该如何完成作业重新开始?我已经尝试过 spring 框架的 Joboperator 接口的 startNextInstance() 方法,并且还尝试手动增加 JobParameters 以便没有 jobinstancealrrradyrunning 异常?

有人对如何在 Spring Framework 中重新启动已标记为已完成的作业有任何代码 sn-p 或替代想法吗?

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

【问题讨论】:

    标签: spring restlet


    【解决方案1】:

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

    在批处理术语中,您实际上无法重新启动 COMPLETED 实例或执行。单个作业实例由作业参数标识。如果您需要使用相同的参数再次运行作业,一种方法是包含一些唯一参数,例如在启动之前将当前时间戳记到JobParameters

    因此,重新启动已完成的作业意味着启动具有类似参数的作业的新实例。这是我之前使用的稍微修改的 sn-p,它使用 JobLauncherJobRegistry 按名称启动新作业:

    @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

    【讨论】:

    • 您好,非常感谢您的回答。我尝试了上面的代码,但不幸的是,即使作业名称有效,jobRegistry.getJob(jobName) 部分也会引发异常。所以,我想看看该怎么做。
    • 您看到什么样的异常?至少您需要确保 JobRegistry 和 JobLauncher 组件存在于应用程序上下文中。
    • 嘿,很抱歉回复晚了。我的 JobLauncher 配置不正确,因此无法正常运行,但我现在可以正常工作了,非常感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2015-12-17
    • 2017-08-04
    • 2021-12-26
    • 2019-09-23
    • 2015-03-05
    • 1970-01-01
    • 2019-01-05
    • 1970-01-01
    相关资源
    最近更新 更多