cron4j 是一個輕量級的Java任務排程工具。cron4j-solon-plugin 是 solon 對 cron4j 的適配外掛
新增 maven 引用
<dependency>
<groupId>org.noear</groupId>
<artifactId>cron4j-solon-plugin</artifactId>
<version>1.5.11</version>
</dependency>
cron4j的cron表示式最多隻允許5個部分,每個部分用空格分隔開,從左至右分別表示“分”、“時”、“天”、“月”、“周”,具體規則如下:
分:取值從 0 到 59
時:取值從 0 到 23
天:取值從 1 到 31,字母 L 可用於表示月的最後一天
月:取值從 1 到 12,可以用別名表示:jan、feb、mar、apr、may、jun、jul、aug、sep、oct、nov、dec
周:取值從 0 到 6,0表示週日,6表示週六,可以用別名表示:sun、mon、tue、wed、thu、fri、sat
以上5個部分的分、時、天、月、周又分別支援如下字元:
數字 n :表示一個具體的時間點,例如 5 * * * * 表示 5 分這個時間點時執行
逗號 , :表示指定多個數值,例如 3,5 * * * * 表示 3 和 5 分這兩個時間點執行
減號 - :表示範圍,例如 1-3 * * * * 表示 1 分、2 分再到 3 分這三個時間點執行
星號 * :表示每一個時間點,例如 * * * * * 表示每分鐘執行
除號 / :表示指定一個值的增加幅度。例如 */5表示每隔5分鐘執行一次(序列:0:00, 0:05, 0:10, 0:15 等等)
常見錯誤:
cron4j在表示式中使用除號指定增加幅度時與linux稍有不同。例如在linux中表示式 10/3 * * * * 的含義是從第10分鐘開始,每隔三分鐘排程一次,而在cron4j中需要使用 10-59/3 * * * * 來表達。
cron4j-solon-plugin 外掛的 @Cron5x 註解
Cron5x 表示,支援5段的 Cron 表示式;同時支援快速配置:s m h d,例:10s (每隔10秒跑一次)
新建程式碼檔案,試一試
- java/jobapp/JobApp
- java/jobapp/controller/Cron4jRun1
- java/jobapp/controller/Cron4jRun2
- java/jobapp/controller/Cron4jTask
- reources/application.properties
程式碼
- JobApp 程式碼
JobApp.java
//
// 啟用 Cron4j 主解的任務
//
@EnableCron4j
public class JobApp {
public static void main(String[] args) {
Solon.start(JobApp.class, args);
}
}
- 使用快捷配置模式:n + ms,s,m,h,d ;使用Runnable介面開發
Cron4jRun1.java
@Cron4j(cron5x = "2s", name = "job1")
public class Cron4jRun1 implements Runnable {
@Override
public void run() {
System.out.println("我是 Cron4jRun1 (2s)");
}
}
- 使用cron5x配置模式:* * * * * ;使用Runnable介面開發
Cron4jRun2.java
@Cron4j(cron5x = "*/1 * * * *")
public class Cron4jRun2 implements Runnable {
@Override
public void run() {
System.out.println("我是 Cron4jRun2 (*/1 * * * *)");
}
}
- 使用cron5x配置模式:* * * * * ;使用Task介面開發
Cron4jTask.java
@Cron4j(cron5x = "*/1 * * * *")
public class Cron4jTask extends Task {
@Override
public void execute(TaskExecutionContext context) throws RuntimeException
System.out.println("我是 Cron4jTask (*/1 * * * *)");
}
}
通過配置,控制有name的任務
application.properties
# solon.cron4j.{job name}
#
solon.cron4j.job1.cron5x=10s #重新定義時間表示式
solon.cron4j.job1.enable=true #用任務進行啟停控制
執行輸出
solon.plugin:: Start loading
file:/Users/xieyuejia/WORK/work_github/solon_demo/demo10.solon_schedule/target/classes/application.properties
jar:file:/Users/xieyuejia/.m2/repository/org/noear/cron4j-solon-plugin/1.2.20/cron4j-solon-plugin-1.2.20.jar!/solonplugin/solon.extend.cron4j.properties
我是定時任務: Cron4jRun1(200ms))
solon.plugin:: End loading @129ms
我是定時任務: Cron4jRun1(200ms)
DEMO原始碼