簡體   English   中英

如何避免在 Spring 雲數據流上仍在運行時重新啟動任務

[英]How to avoid relaunching task while it's status is still running on Spring Cloud Data Flow

我在 Spring 雲數據流上部署了一個 Spring 批處理項目作為任務。

我第一次啟動了任務(它將運行大約 5 分鍾,這使得任務的狀態為“正在運行”)。 但是,當它的狀態為運行並且它再次工作時,我第二次重新啟動了此任務。

1)如何配置任務直到最后一次完成狀態才能重新啟動。 2)此外,我發現停止作業時,它將執行直到完成當前步驟(我的作業有2個步驟,第二個步驟沒有執行)。 但是,當我停止工作時,有什么方法可以立即關閉它(步驟 1)?

您可以使用JobExplorer class 來檢查正在運行的作業,請參閱jobExplorer.findRunningJobExecutions(jobName)方法。

在你的 JobLauncher class 你可以這樣:

@Component
public class MyJobLauncher {

    private static final Logger LOG = LoggerFactory.getLogger(MyJobLauncher.class);

    private final Job job;

    private final JobLauncher jobLauncher;

    private final JobExplorer jobExplorer;

    @Autowired
    public MyJobLauncher(@Qualifier("myJob") Job job, JobLauncher jobLauncher, JobExplorer jobExplorer) {
        this.job = job;
        this.jobLauncher = jobLauncher;
        this.jobExplorer = jobExplorer;
    }

    public void launchJob() throws JobParametersInvalidException, JobExecutionAlreadyRunningException,
            JobRestartException, JobInstanceAlreadyCompleteException, IOException {

        if (jobExplorer.findRunningJobExecutions("myJob").isEmpty()) {
            LOG.info("Starting myJob");
            jobLauncher.run(job, new JobParameters());
            LOG.info("Stopping myJob");
        }
    }
}

要關閉作業,請檢查JobExecution.stop()方法,該方法可以從jobExplorer.getJobExecution()方法中獲取。

如何避免在 Spring 雲數據流上仍在運行時重新啟動任務

Spring Cloud Task 2.0.0 添加了一項功能,可讓您防止任務並發運行。 https://spring.io/blog/2018/05/07/spring-cloud-task-2-0-0-release-is-now-available#restricting-concurrent-task-execution

您需要激活spring.cloud.task.singleInstanceEnabled=true屬性。

您可以在限制 Spring 雲任務實例部分找到更多詳細信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM