Quartz定時任務(附demo)(一)

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個週五

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章