我需要編寫一個調度程序類,應該每隔5,15和30分鐘調用一次。如何在Java中創建一個調度程序類
我應該如何開始使用此調度程序?我想用Java 7.
一種方法是知道當前時間,然後計劃每個計時器的差值。
有沒有已經做過類似工作的圖書館或班級?
我需要編寫一個調度程序類,應該每隔5,15和30分鐘調用一次。如何在Java中創建一個調度程序類
我應該如何開始使用此調度程序?我想用Java 7.
一種方法是知道當前時間,然後計劃每個計時器的差值。
有沒有已經做過類似工作的圖書館或班級?
石英2,這將是
Trigger trigger = TriggerBuilder
.newTrigger()
.withIdentity("someTriggerName", "someGroup")
.withSchedule(
CronScheduleBuilder.cronSchedule("0 5,15,30 * * * ?"))
.build();
這將創建一個將激活觸發器小時過後的正確分鐘。第一場是秒;接下來是分鐘;然後小時;每月的某一天;月;星期幾(您希望未指定,因此爲?
)。您可以爲每個條目指定多個條目,並且總是意味着;所以這是所有的日子,在過去5,10或15分鐘和0秒。
現在你可以創建一個Quartz工作
public class MyJob implements Job
{
public void execute(JobExecutionContext context throws JobExecutionException {
// do something useful
}
}
,並使用該觸發其排定:
Scheduler sched = new StdSchedulerFactory().getScheduler();
sched.start();
sched.scheduleJob(new MyJob(), trigger);
謝謝,可能會對cronSchedule參數產生一些影響。我在我的問題中忘記提到的是,我需要安排5分鐘,15分鐘,30分鐘等粒度的工作,所以5分鐘的工作應該在00:00,00:05,00:10運行。 15分鐘的工作應該在00:00,00:15運行。所以這種方式在00:00,00:30的粒度爲5,15,30的任務都會運行。在00:15,00:45 - 運行5分鐘和15分鐘粒度的任務。 – Bankelaal
也想知道,當工作安排時,有一種方法可以知道它是否是第5分鐘或第15分鐘的工作......這是被觸發的。當然,我可以通過編程方式找到它,但是如果它可用於開箱即可。 – Bankelaal
@Bankelaal啊,如果你希望他們按固定的時間間隔安排,每隔五分鐘和每十五分鐘一次,那麼你最好不要擔心Quartz! Quartz的意義在於你可以指定一個複雜的時間表,比如上面的時間表。 –
你應該使用Quartz作業,快速入門可以在這裏
http://www.mkyong.com/java/quartz-scheduler-example/
關於精確表達式,這裏有文檔,滿載例子
http://www.quartz-scheduler.org/documentation/quartz-1.x/tutorials/crontrigger
別重新發明輪子,使用現有的應用程序,使用Quartz scheduler或類似的應用程序。
從b_erb:
private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
scheduler.scheduleAtFixedRate(yourRunnable, 0, 5, MINUTES);
private final ScheduledExecutorService scheduler1 = Executors.newScheduledThreadPool(1);
scheduler1.scheduleAtFixedRate(yourRunnable1, 0, 15, MINUTES);
private final ScheduledExecutorService scheduler2 = Executors.newScheduledThreadPool(1);
scheduler2.scheduleAtFixedRate(yourRunnable2, 0, 30, MINUTES);
可以用來每15分鐘計劃一次任務,但不是每小時的第15分鐘。 – Thilo
如果您正在使用Spring
,您可以使用@Scheduled
計劃任務。
點擊這裏獲取statred https://spring.io/guides/gs/scheduling-tasks/。
如果簡單週期性調度表達不足,則可以提供cron expression。例如,以下內容僅在平日每15分鐘執行一次。
@Scheduled(cron="* */15 * * * MON-FRI")
public void doSomething() {
// something that should execute on weekdays only
}
你需要注意*
和cron expresssion的/
你的情況
* :("all values") - used to select all values within a field. For example, "*" in the minute field means "every minute".
/:- used to specify increments. For example, "0/15" in the seconds field means "the seconds 0, 15, 30, and 45". And "5/15" in the seconds field means "the seconds 5, 20, 35, and 50".
我認爲,你可以使用Quartz scheduler實施任何計劃作業。它非常易於使用。
請參見下面的代碼調度:
public class SimpleScheduler
{
public static void main(String[] args) throws Exception
{
JobDetail job = new JobDetail();
job.setName("hello");
job.setJobClass(SchedulerJob .class);
//configure the scheduler time
SimpleTrigger trigger = new SimpleTrigger();
trigger.setName("hello name");
trigger.setStartTime(new Date(System.currentTimeMillis() + 1000));
trigger.setRepeatCount(SimpleTrigger.REPEAT_INDEFINITELY);
trigger.setRepeatInterval(30000);
//schedule it
Scheduler scheduler = new StdSchedulerFactory().getScheduler();
scheduler.start();
scheduler.scheduleJob(job, trigger);
}
}
接口名稱:
public class SchedulerJob implements Job
{
public void execute(JobExecutionContext context)
throws JobExecutionException {
System.out.println("u develop the code here");
}
}
你知道[石英調度(http://quartz-scheduler.org/)或類似的應用程序? – 1ac0
@Davide Pastore,op沒有要求固定延遲 – Shail016
您可以創建具有不同延遲的不同調度程序並執行相同的可運行程序。 –