Java-Quartz vs. Linux-Crontab

Java-Quartz vs. Linux-Crontab

這篇介紹Java-Quartz和Linux-Crontab兩者不同以及使用時機。

Java-Quartz

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//Excample code:
package com.nv.quartzjob;

import org.quartz.DisallowConcurrentExecution;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

@DisallowConcurrentExecution
public class UpdateJob implements Job {

@Override
public void execute(final JobExecutionContext ctx) throws JobExecutionException {
//do something
}
}
Java-Quartz若加入@DisallowConcurrentExecution annotation設定
執行Job時同時只會有一個Job存在,下一個會等待上一個完成才執行。

Linux-Crontab

1
2
3
4
5
crontab -l
//每秒去清log
* * * * * sh /home/clearLog.sh
在Linux的crontab是屬於fire at time,當時間一到就馬上執行,不會去判斷上一個crontab還
在不在,屬於ConcurrentExecution。

兩者比較&使用時機

1
2
3
4
5
6
7
在Java中,可以依照需求,若方法是依照功能區分,該Job可命名為功能Job。
若需依照periodTime,有多個功能要加入period10minsJob內,則可以使用MultiThread
做平行處理,達到一樣的效果。
---
在Linux-Crontab
則需要注意平行處理所造成非預期的結果,例如每秒校正對時,在網路延遲時有可能對時
會每秒發生錯誤對時,造成系統時間異常。