QuartZ

Posted hk-zsg

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QuartZ相关的知识,希望对你有一定的参考价值。

        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()));

 

技术图片技术图片

技术图片 技术图片

 官网:www.quartz-scheduler.org

技术图片

 

 

 技术图片

 

 

 组件模式:最终要的三部分:日任务job,触发器trigger,调度器schedule

 

 

 

技术图片

所有的任务调度都要通过execute完成

技术图片

 

 

 技术图片

 

 

 技术图片

 

 

 入门案例:

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();
    

输出:

名称: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.java

 

 技术图片

 

HelloJob.java

 

 技术图片

 

 

 

 技术图片

 

 

 技术图片

 

 

 技术图片

 

 

 如果想要获取job的数据,key不能设置和trigger一样

 

以上是关于QuartZ的主要内容,如果未能解决你的问题,请参考以下文章

Quartz学习

.NET 任务调度

Quartz深入浅出

59Quartz+Spring框架详解

业调度框架_Quartz

Quartz的配置与使用