quartz简单应用入门

1. Quartz介绍
   任务调度框架“Quartz”是OpenSymphony开源组织在Job scheduling领域又一个开源项目,是完全由java开发的一个开源的任务日程管理系统

简单来说就是一个定时任务系统

quartz的应用场景大致分为两类
        定时定点完成某一操作(数据库操作)
        遵循某一规律,循环执行某一操作
        
   五种类型的Trigger(定时器) 最常用的是前面两个触发器
   SimpleTrigger,CronTirgger,DateIntervalTrigger,NthIncludedDayTrigger和Calendar类( org.quartz.Calendar)。

下面就来玩一个简单定时任务。

首先创建spring boot项目 勾选quartz的依赖 另外还需要另外一个pom依赖

这个是springboot创建有的

 <dependency>
           <groupId>org.quartz-scheduler</groupId>
           <artifactId>quartz</artifactId>
           <version>2.2.1</version>
      </dependency>

后面这个是需要另外导入的
      <dependency>
           <groupId>org.quartz-scheduler</groupId>
           <artifactId>quartz-jobs</artifactId>
           <version>2.2.1</version>
      </dependency> 

然后创建一个类 实现job类

public class RamJob implements Job {
    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        System.out.println("定时任务启动。。。");
        JobDataMap jobDataMap = jobExecutionContext.getJobDetail().getJobDataMap();//获取到那边的值
        System.out.println(jobDataMap.get("name") + "" + jobDataMap.get("a1") + "" + jobDataMap.get("a2"));

    }
}

最后进行测试 每步操作都有备注 运行就能看到触发器触发的设置

总结来说就是创建一个实例机制 然后得到调动器 用调度器来把作业类和触发器里面的设置组装起来 最后启动就可以了。

public class Demo {
    public static void main(String[] args) throws SchedulerException {
        SchedulerFactory sf=new StdSchedulerFactory();//提供程序实例的机制
        Scheduler scheduler=sf.getScheduler();//调度器 调度JobDetail和触发器
        //new一个作业类 里面放了那个需要定时的类
        JobDetail jobDetail=newJob(RamJob.class)
                .withIdentity("job1","group1")//唯一标识
                .withDescription("is job")//给一个名字
                .usingJobData("name","zs")//第一种设置参数值
                .build();
        JobDataMap jobDataMap=jobDetail.getJobDataMap();//第二种用map获取
        jobDataMap.put("a1","hh");
        jobDataMap.put("a2","ls");
        //触发器
        Trigger trigger= (Trigger) TriggerBuilder.newTrigger()
                //简单重复去执行某一操作 比如执行3此五秒一次 简单定时器
               .withSchedule(SimpleScheduleBuilder.repeatSecondlyForTotalCount(3,5))
               //表达式触发器 比如在12点04分触发 "0/5 * * * * ?"每五秒钟执行一次
              //  .withSchedule(CronScheduleBuilder.cronSchedule("0 04 12 * * ?"))
                .withIdentity("trigger1","group1")
                .withDescription("这是 tigger").build();
        scheduler.scheduleJob(jobDetail,trigger);//把两个类组装起来
        scheduler.start();//最后启动调动器

    }
}

上面说到了两种触发器 一种简单触发器重复去执行某一操作

表达式触发器设置在某个时间触发 还有其他一些值 比如几秒执行一次等

下面有很多的设置都可以参考

 

5684

最后在说一下spring自带的定时任务管理

要用service表示被spring管理 运行时要在主程序类里加上

@EnableScheduling//扫描包定时任务   注解

 使用方便 但是单线程的 只能一个一个执行

@Service
public class SpringScheduled {
    //spring自带定时任务无需整合 给一个注解表明被spring管理 依赖的service层可直接注入当前任务类 quertz不能
    //缺点:spring task是单线程 只能一个一个执行 不能像quertz那样
    @Scheduled(cron = "0/5 * * * * ?")//每五秒执行一次 加上此注解即可 主程序类里需要加一个注解
    public void aaa(){
        System.out.println("spring的定时任务");
    }
}

 大概的对比就在这里 可自行参考一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值