Quartz定时任务(附demo)(一)

来源:互联网 发布:东莞虎门淘宝摄影 编辑:程序博客网 时间:2024/05/18 02:44

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个节点代表,如下:

  1. Seconds
  2. Minutes
  3. Hours
  4. Day-of-Month
  5. Month
  6. Day-of-Week
  7. 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个周五

原创粉丝点击