定時任務_Quartz

一、說明

quartz採用cron表達的方式設定超時,如果瞭解linux的crontab功能的朋友應該比較容易理解,此處不介紹cron表達試,如果需要學習請找google或者百度

二、示例程序

1、maven配置

        <dependency>
            <groupId>quartz</groupId>
            <artifactId>quartz</artifactId>
            <version>1.5.2</version>
        </dependency>

2、程序代碼

public class MySchedulerManager {
    private static SchedulerFactory gSchedulerFactory = new StdSchedulerFactory();
    // 添加定時任務,傳入的微cron表達式
    public void scheduleJob(String cronEx) {
        String jobName = "jobName";
        String jobGroupName = "jobGroupName";
        String triggerGroupName = "triggerGroupName";
        try {
            Scheduler sched = gSchedulerFactory.getScheduler();
            // 先刪除原有的定時任務
            removeJob(jobName, jobGroupName, triggerGroupName);
            // 安排任務,設定超時執行的方法
            JobDetail jobDetail = new MyJobDetail(jobName, jobGroupName);
            // 觸發器
            CronTrigger trigger = new CronTrigger(jobDetail.getName(), triggerGroupName, cronEx);
            sched.scheduleJob(jobDetail, trigger);
            // 啓動任務
            if (!sched.isShutdown()) {
                sched.start();
            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
    // 刪除定時任務
    public void removeJob(String jobName, String jobGroupName, String triggerGroupName) {
        try {
            Scheduler sched = gSchedulerFactory.getScheduler();
            sched.pauseTrigger(jobName, triggerGroupName);// 停止觸發器
            sched.unscheduleJob(jobName, triggerGroupName);// 移除觸發器
            sched.deleteJob(jobName, jobGroupName);// 刪除任務
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}
// 超時執行類
class MyJobDetail extends JobDetail {
    private static final long serialVersionUID = 1L;

    public MyJobDetail(String name, String group) {
        setName(name);
        setGroup(group);
        setJobClass(SysQuartzJobImpl.class);
    }

    public static class SysQuartzJobImpl implements Job {
        // 超時執行的方法
        @Override
        public void execute(JobExecutionContext context) throws JobExecutionException {
            System.out.println("=====Execute====");
        }
    }
}


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