簡體   English   中英

Spring Boot Job Scheduler

[英]Spring Boot Job Scheduler

我正在嘗試在Spring Boot Batch Processing中定義多個作業。 我可以很輕松地安排工作,但是當我只需要安排一些特定的工作時就會遇到問題。 這是我的方法,定義我要在其中計划工作的計划類。 我可以安排特定的工作,而不是一起安排所有的工作嗎? 謝謝

 import org.apache.log4j.Logger; import org.springframework.batch.core.Job; import org.springframework.batch.core.JobExecution; import org.springframework.batch.core.JobParameters; import org.springframework.batch.core.JobParametersBuilder; import org.springframework.batch.core.JobParametersInvalidException; import org.springframework.batch.core.launch.JobLauncher; import org.springframework.batch.core.repository.JobExecutionAlreadyRunningException; import org.springframework.batch.core.repository.JobInstanceAlreadyCompleteException; import org.springframework.batch.core.repository.JobRestartException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @Component @EnableScheduling public class JobScheduler { static Logger logger=Logger.getLogger(JobScheduler.class); @Autowired JobLauncher jobLauncher; @Autowired private Job job; @Scheduled(cron="10 * * * * *") //Scheduling job at the interval of 10 seconds public void scheduleJob(){ JobParameters jobParameters=new JobParametersBuilder().addLong("time",System.currentTimeMillis()).toJobParameters(); try { String jobName=job.getName(); logger.info("JOB NAME===> "+jobName); JobExecution jobExecution=jobLauncher.run(job, jobParameters); logger.info("JOB'S STATUS===> "+jobExecution.getStatus()); } catch (JobExecutionAlreadyRunningException e) { } catch (JobRestartException e) { } catch (JobInstanceAlreadyCompleteException e) { } catch (JobParametersInvalidException e) { } } } 

看這個簡單的例子:

https://spring.io/guides/gs/scheduling-tasks/

您需要做的就是使用@SpringBootApplication @EnableScheduling批注啟用調度。

然后,您可以對要創建計划任務的任何@Component中的特定方法使用@Scheduled批注,並為每個任務設置不同的計划時間。 隨你想要。

您不需要創建JobScheduler,JobLuncher或Job。

是的,你可以這么做。 制作一個單獨的方法/類,並使用switch-case (使用Java)實現它。 對每個作業都有單獨的方法調用(我假設您要安排不同的作業)。 示例代碼看起來像這樣-

switch(job) {
    case 'job1' {
    executejob1(job1, jobParameters);
    break;
    }
    case 'job2' {
    executejob1(job2, jobParameters);
    break;
    }
    case 'job3' {
    executejob1(job3, jobParameters);
    break;
    }
    case 'job4' {
    executejob1(job4, jobParameters);
    break;
    }
}

現在,您只需使用要計划的“作業”及其作業參數來調用它。 希望這會有所幫助。

暫無
暫無

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

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