QuartZ

聲音感受小的能夠設置windows響度均衡:https://jingyan.baidu.com/article/ed15cb1ba197551be2698171.html
cron表達式生成工具,可調試cron: http://www.bejson.com/othertools/cron/

 

 官網:www.quartz-scheduler.orghtml

 

 

 

 

 

 組件模式:最終要的三部分:日任務job,觸發器trigger,調度器schedulejava

 

 

 

全部的任務調度都要經過execute完成數據庫

 

 

 

 

 

 

 

 

 入門案例:json

public class HelloJob implements Job {

    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
        // 輸出當前時間
        Date date = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String dataString = sdf.format(date);
        // 工做內容
        System.out.println("正在進行數據庫的備份工做,備份數據庫的時間是:" + dataString);
    }

}
public class HelloScheduleDemo {

    public static void main(String[] args) throws Exception {
        // 1.調度器(Scheduler) ,從工廠中獲取調度的實例(默認:實例化)
        Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
        // 2.任務實例
        JobDetail jobDetail = JobBuilder.newJob(HelloJob.class).withIdentity("job1", "group1") // 參數1:任務的名稱;參數2:任務組的名稱
                .build();
        // 3.觸發器
        SimpleTrigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger", "group1")// 參數1:觸發器名稱;參數2:觸發器組的名稱
                .startNow()// 立刻啓動觸發器
                .withSchedule(SimpleScheduleBuilder.simpleSchedule().repeatSecondlyForever(5)).build();

        // 讓調度器關聯任務和觸發器,保證按照觸發器定義的條件執行任務
        scheduler.scheduleJob(jobDetail, trigger);
        scheduler.start();
    }

}

 

 

 

public class HelloScheduleDemo {

    public static void main(String[] args) throws Exception {
        // 1.調度器(Scheduler) ,從工廠中獲取調度的實例(默認:實例化)
        Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
        // 2.任務實例
        JobDetail jobDetail = JobBuilder.newJob(HelloJob.class).withIdentity("job1", "group1") // 參數1:任務的名稱;參數2:任務組的名稱
                .build();
        System.out.println("名稱:" + jobDetail.getKey().getName());
        System.out.println("組的名稱:" + jobDetail.getKey().getGroup());
        System.out.println("任務類" + jobDetail.getJobClass().getName());
        // 3.觸發器
        SimpleTrigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger", "group1")// 參數1:觸發器名稱;參數2:觸發器組的名稱
                .startNow()// 立刻啓動觸發器
                .withSchedule(SimpleScheduleBuilder.simpleSchedule().repeatSecondlyForever(5)).build();

        // 讓調度器關聯任務和觸發器,保證按照觸發器定義的條件執行任務
        scheduler.scheduleJob(jobDetail, trigger);
        scheduler.start();
    }

}

輸出:windows

名稱:job1
組的名稱:group1
任務類com.quartz.HelloJob
 INFO [main] - Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED started.
正在進行數據庫的備份工做,備份數據庫的時間是:2019-09-04 23:06:49
正在進行數據庫的備份工做,備份數據庫的時間是:2019-09-04 23:06:54
正在進行數據庫的備份工做,備份數據庫的時間是:2019-09-04 23:06:59
正在進行數據庫的備份工做,備份數據庫的時間是:2019-09-04 23:07:04
正在進行數據庫的備份工做,備份數據庫的時間是:2019-09-04 23:07:09
正在進行數據庫的備份工做,備份數據庫的時間是:2019-09-04 23:07:14

 

 

 

 

HelloSchedulerDemo.javaide

 

 

 

HelloJob.java工具

 

 

 

JobDataMap jobDataMap = context.getJobDetail().getJobDataMap();
        // 從JobDetail中獲取JobDataMap的數據
        String jobDataMessage = jobDataMap.getString("message");
        System.out.println("任務數據的參數值:" + jobDataMessage);
        // 獲取Trigger對象中獲取JobDataMap的數據
        JobDataMap jobDataMap2 = context.getTrigger().getJobDataMap();
        String triggerDataMessage = jobDataMap2.getString("message");
        System.out.println("觸發器數據的參數值:" + triggerDataMessage);
        //獲取trigger的內容
        TriggerKey triggerKey=context.getTrigger().getKey();
        System.out.println("觸發器名稱:"+triggerKey.getName()+";觸發器組:"+triggerKey.getGroup());
        
        System.out.println("****************");
        
        //獲取其餘內容
        System.out.println("當前任務執行時間:"+sdf.format(context.getFireTime()));
        System.out.println("下一次任務執行時間:"+sdf.format(context.getNextFireTime()));

 

 

 

 

 

 

 

 

 

 

 

 

 若是想要獲取job的數據,key不能設置和trigger同樣ui

 

 

 

 

public class HelloSchedulerDemoTrigger {
    public static void main(String[] args) throws Exception {
        //設置任務的開始時間
        Date startDate = new Date();
        startDate.setTime(startDate.getTime()+3000);
        //設置任務的結束時間
        Date endDate = new Date();
        endDate.setTime(endDate.getTime()+10000);


        //1.調度器(Scheduler),從工廠中獲取調度的實例(默認:實例化new StdSchedulerFactory())
        Scheduler defaultScheduler = StdSchedulerFactory.getDefaultScheduler();

        //2.任務實例(JobDetail)
        JobDetail jobDetail = JobBuilder.newJob(HelloJobTrigger.class)
                .withIdentity("job1", "group1")//
                .usingJobData("message", "打印日誌")//傳遞參數,名稱message
                .build();
        //3.觸發器(Trigger)
        Trigger trigger = TriggerBuilder.newTrigger()
                .withIdentity("trigger", "group1")
//                .startNow()//立刻啓動觸發器
                .withSchedule(SimpleScheduleBuilder.simpleSchedule().repeatSecondlyForever(5))
                .startAt(startDate)//設置任務開始時間
                .endAt(endDate)//設置任務結束時間
                .build();

        //讓調度器關聯任務和觸發器,保證按照觸發器定義的條件執行任務
        defaultScheduler.scheduleJob(jobDetail, trigger);
        //啓動
        defaultScheduler.start();
    }
}
public class HelloJobTrigger implements Job {
    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
        //輸出當前日期
        Date date = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String dateString = sdf.format(date);

        //工做內容
        System.out.println("正在進行數據庫的備份工做" + dateString);

        //獲取jobKey、startTime、endTime
        Trigger trigger = context.getTrigger();
        System.out.println("jobKey的名稱:" + trigger.getJobKey().getName());
        System.out.println("jobKey組的名稱:" + trigger.getJobKey().getGroup());

        System.out.println("任務的開始時間:" + sdf.format(trigger.getStartTime()));
        System.out.println("任務的結束時間:" + sdf.format(trigger.getEndTime()));
    }
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  cron表達式生成工具:http://www.bejson.com/othertools/cron/this

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

本教程重點講解StdSchedulerFactory,DirectSchedulerFactory自行了解spa

 

 

 

 

 quartz.properties

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

public class MyJobListener implements JobListener {

    @Override
    public String getName() {
        // 監聽器名稱
        String name = this.getClass().getName();
        name = "監聽器的名稱是:" + name;
        return name;
    }

    @Override
    public void jobToBeExecuted(JobExecutionContext context) {
        System.out.println("Scheduler在JobDetail將要執行時調用的方法");
    }

    @Override
    public void jobExecutionVetoed(JobExecutionContext context) {
        System.out.println("否決");

    }

    @Override
    public void jobWasExecuted(JobExecutionContext context, JobExecutionException jobException) {
        System.out.println("scheduler在job執行以後的監聽");

    }

}

 

public class HelloSchedulerDemoJobListener {
    public static void main(String[] args) throws SchedulerException, Exception {
        // 任務實例:
        JobDetail jobDetail = JobBuilder.newJob(HelloJobScheduler.class)
                .withIdentity("job1", "group1")
                .build();

        // 觸發器:
        Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "group1")// 參數1:設置觸發器名稱,參數2:設置觸發器組的名稱
                .withSchedule(CronScheduleBuilder.cronSchedule("* * * * * ?")).build();

        // 讓調度器關聯任務和觸發器,保證按照觸發器定義的添加執行任務
        Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
        Date scheduleJob = scheduler.scheduleJob(jobDetail, trigger);
        System.out.println("調度器的開始時間是:" + new SimpleDateFormat("yyyy-MM-dd HH:dd:ss").format(scheduleJob));
        
        
        //建立並註冊一個全局的job listener
//        scheduler.getListenerManager().addJobListener(new MyJobListener(),EverythingMatcher.allJobs());
        
        
        //建立並註冊一個局部的job listener
        scheduler.getListenerManager().addJobListener(new MyJobListener(),KeyMatcher.keyEquals(JobKey.jobKey("job1", "group1")));
        
        scheduler.start();
        
    }
}

 

 

 

 

 

 

 

 

 

public class MyTriggerListener implements TriggerListener {

    @Override
    public String getName() {
        String name = this.getClass().getSimpleName();
        System.out.println("觸發器的名稱:" + name);
        return name;
    }

    @Override
    public void triggerFired(Trigger trigger, JobExecutionContext context) {
        String triggerName = trigger.getKey().getName();
        System.out.println("觸發器的名稱:" + triggerName + "被觸發了");
    }

    @Override
    public boolean vetoJobExecution(Trigger trigger, JobExecutionContext context) {
        String triggerName = trigger.getKey().getName();
        System.out.println("觸發器的名稱:" + triggerName + "沒有觸發");
        return false;// true表示不會執行job的方法
    }

    @Override
    public void triggerMisfired(Trigger trigger) {
        String triggerName = trigger.getKey().getName();
        System.out.println("觸發器的名稱:" + triggerName + "錯過觸發");
    }

    @Override
    public void triggerComplete(Trigger trigger, JobExecutionContext context,
            CompletedExecutionInstruction triggerInstructionCode) {
        String triggerName = trigger.getKey().getName();
        System.out.println("觸發器的名稱:" + triggerName + "完成以後觸發");
    }

}
// 建立並註冊一個全局的trigger listener
//        scheduler.getListenerManager().addTriggerListener(new MyTriggerListener(), EverythingMatcher.allTriggers());

        // 建立並註冊一個局部的trigger listener
        scheduler.getListenerManager().addTriggerListener(new MyTriggerListener(),
                KeyMatcher.keyEquals(TriggerKey.triggerKey("trigger1", "group1")));

 

 

 

 

相關文章
相關標籤/搜索