Quartz定時任務(附demo)(一)
源碼下載地址:https://gitee.com/seek412/quartz01.git
1. 什麼是Quartz
Quartz是一個開源的作業調度框架,可以讓計劃的程序任務一個預定義的日期和時間運行
2. 創建普通Quartz定時任務
首先引入jar包
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.demo</groupId>
<artifactId>quartz</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>quartz</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.0</version>
</dependency>
</dependencies>
<build>
<finalName>tiny</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.7</source>
<target>1.7</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
</project>
創建定時任務A
package com.demo.schedule;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
/**
* 定時任務A
* @author Administrator
* @date 2017-11-23 下午 15:24
*/
public class JobA implements Job{
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
System.out.println("執行定時任務A...");
}
}
創建定時任務B
package com.demo.schedule;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
/**
* 執行定時任務B
* @author Administrator
* @date 2017-11-23 下午 15:28
*/
public class JobB implements Job{
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
System.out.println("執行定時任務B...");
}
}
創建測試類
package com.demo.schedule;
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;
/**
* @author Administrator
* @date 2017-11-23 下午 15:29
*/
public class TestJob {
public static void main(String[] args) throws SchedulerException {
//獲取工廠
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
//調度器
Scheduler scheduler = schedulerFactory.getScheduler();
//定時任務A
JobKey jobKeyA = new JobKey("jobA","groupA");
JobDetail jobDetailA = JobBuilder.newJob(JobA.class)
.withIdentity(jobKeyA)
.build();
//定時任務B
JobKey jobKeyB = new JobKey("jobB","groupB");
JobDetail jobDetailB = JobBuilder.newJob(JobB.class)
.withIdentity(jobKeyB)
.build();
//定義觸發的條件
//每個5秒觸發一次
Trigger triggerA = TriggerBuilder
.newTrigger()
.withIdentity("dummyTriggerNameA","groupA")
.withSchedule(CronScheduleBuilder.cronSchedule("0/5 * * * * ?"))
.build();
//每個1秒觸發一次
Trigger triggerB = TriggerBuilder
.newTrigger()
.withIdentity("dummyTriggerNameB","groupB")
.withSchedule(CronScheduleBuilder.cronSchedule("0/1 * * * * ?"))
.build();
//4. 啓動定時任務
scheduler.start();
scheduler.scheduleJob(jobDetailA,triggerA);
scheduler.scheduleJob(jobDetailB,triggerB);
}
}
運行測試類中main方法,控制檯輸入如下結果:
cron時間表達式
cron的表達式由7個節點代表,如下:
- Seconds
- Minutes
- Hours
- Day-of-Month
- Month
- Day-of-Week
- Year (可選字段)
常見的cron表達式
每隔5秒執行一次:/5 * * * ?
每隔1分鐘執行一次:0 /1 * * ?
每天23點執行一次:0 0 23 * * ?
每天凌晨1點執行一次:0 0 1 * * ?
每月1號凌晨1點執行一次:0 0 1 1 * ?
每月最後一天23點執行一次:0 0 23 L * ?
每週星期天凌晨1點實行一次:0 0 1 ? * L
在26分、29分、33分執行一次:0 26,29,33 * * * ?
每天的0點、13點、18點、21點都執行一次:0 0 0,13,18,21 * * ?
cron表達式符號說明
“?”字符:表示不確定的值
“,”字符:指定數個值
“-”字符:指定一個值的範圍
“/”字符:指定一個值的增加幅度。n/m表示從n開始,每次增加m
“L”字符:用在日表示一個月中的最後一天,用在周表示該月最後一個星期X
“W”字符:指定離給定日期最近的工作日(週一到週五)
“#”字符:表示該月第幾個周X。6#3表示該月第3個週五