不可不学系列(其一) : quarz定时任务 & spring整合quartz

quartz定时任务 & spring整合quartz

概述

今天分享的这个技术应用场景 我就不多说了, 想想你什么时候需要闹钟就明白应用场景 , OK下面说说安装使用以及如何整合到我们的spring的中

突然想diss一下spring 虽然大家都在用可是看过它的源码的都知道 可扩展性太差了 你要使用spring就必须遵循它的一切配置 从主观意愿上来说用户是不情愿的, 从技术上我们都是各种spring整合xxx 没见过xx整合spring的 用多了难受

quartz官网


使用

  • quartz基本原理

    • 任务: 具体执行的工作
    • 触发器: 在特定时间触发任务的执行
    • 调度器: 任务的实际执行者 负责整合任务和触发器
  • 导入Maven依赖

<dependency>
    <groupId>org.quartz-scheduler</groupId>
    <artifactId>quartz</artifactId>
    <version>1.8.6</version>
</dependency>
  • 实现Job接口 在execute方法内实现自己的定时业务

  • 创建任务

    //第一个参数: 代表任务名
    //第二个参数: 对于多个任务指定一个组 也可以自定义
    JobDetail detail = new JobDetail("any", "any", MyJob.class);	
  • 创建触发器

  		//创建触发器
        //第一个参数: 触发器名称自定义
        //第二个参数: 触发的定时策略: 这里是重复时间间隔 3秒一次
        SimpleTrigger trigger = new SimpleTrigger(
                "myTrigger",
                SimpleTrigger.REPEAT_INDEFINITELY,
                3000
        );
        //指定触发器的开启时间
        trigger.setStartTime(new Date(System.currentTimeMillis() + 1000));
  • 定义调度器整合任务和触发器

    
            //创建调度器工厂 拿到一个调度器
            SchedulerFactory schedulerFactory = new StdSchedulerFactory();
            Scheduler scheduler = schedulerFactory.getScheduler();
            //注册 任务和触发器
            scheduler.scheduleJob(job, trigger);
    
            //启动任务
            scheduler.start();
            //scheduler.shutdown();

说明

上面是个小demo 有注意到一个触发器SimpleTrigger

它的使用场景: 固定时间间隔的调度任务, 可以设置任务的开始时间 结束时间 重复次数 以及时间间隔

而对于有些情况下我们需要指定时间点来执行任务 比如闹钟

这个时候需要它的子类 -------Contrigger所以更多的场景是使用这个子类触发器:

 CronTrigger trigger2 = new CronTrigger("myTirgger", "groupName", "* 12 17 ? * *");

前两个参数和父类一样 最后一个是子类特有的cron表达式 上面的含义代表每天的17.12执行这个定时任务

  • 关于cron表达式

    位置含义范围允许的特殊字符
    10 ~ 59* /
    2分钟0 ~ 59* /
    3小时0 ~ 23* /
    41 ~ 31* / ? L
    5月份1 ~ 12 或 JAN ~ DEC* /
    6星期1 ~ 7 或 SUN ~ SAT* / ? L #
    7年份1970 ~ 2099* /

    说明

    ​ 1. 使用cron表达注意从左往右是时间是倒序的(想想英文时间的书写) 且最好有空格间隔

    ​ 2. 表达式至少要有6个元素 少于6个必然报错

    关于通配符

    • ***** : 表示每一个值 用于所有字段

    • ? : 仅用于星期表示不指定值

      • 记忆方法: 周日没有问号
    • - : 表示时间范围 范围连续

    • , : 表示一个时间点列表 不必连续

    • /: 通常表示x/y x为起始值 y代表增量 只有y=1才会连续

      需要注意: 不能同时使用?也不能同时使用 *, 否则都会报错

    • 一些列子

      cron表达式含义
      0 15 4 * * ?每天凌晨4.15启动 一次
      30 0 0 1 1 ? 20142014年1月1日0点0分30秒执行一次
      0 0 14 1,10,20 * ? *每月的1,10,20的下午2点执行一次
      0 0/5 15,17 * * ?每天的15点 到 16点 每5分钟执行一次 , 每天的17点到18点每5分钟执行一次

spring 整合quartz

  • XML方式

    实际上就是将上面的代码注入到spring中, 怎么注入百度一下 吧我采用下面给予注解的配置 仅仅需要一个注解就能完成上面的所有代码

  • 注解方式

    @Scheduled(cron="表达式")

    这个方式属实香


Over

总的来说这个定时技术很好理解 使用也是方便 还在等什么赶紧加入到你的项目中 提升一个逼格吧

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Quartz是一个开源的任务调度框架,可以用来实现各种各样的定时任务。下面是一个简单的示例,演示如何使用Quartz来调度一个定时任务: 1. 添加依赖 在Maven项目中,需要在pom.xml文件中添加以下依赖: ``` <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.3.2</version> </dependency> ``` 2. 编写任务类 创建一个实现Job接口的任务类,实现execute方法: ``` public class MyJob implements Job { public void execute(JobExecutionContext context) throws JobExecutionException { System.out.println("定时任务执行了!"); } } ``` 3. 配置任务触发器 创建一个Trigger对象来描述任务的触发条件,例如: ``` Trigger trigger = TriggerBuilder.newTrigger() .withIdentity("trigger1", "group1") .startNow() .withSchedule(SimpleScheduleBuilder.simpleSchedule() .withIntervalInSeconds(10) .repeatForever()) .build(); ``` 上面的代码表示,创建一个触发器,每隔10秒执行一次任务。 4. 配置任务调度器 创建一个Scheduler对象来调度任务,例如: ``` Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); scheduler.start(); JobDetail job = JobBuilder.newJob(MyJob.class) .withIdentity("job1", "group1") .build(); scheduler.scheduleJob(job, trigger); ``` 上面的代码表示,创建一个调度器,并将任务和触发器都添加到调度器中。 5. 运行程序 运行程序后,任务就会按照预定的时间间隔执行了。 注意:如果要停止任务调度器,可以使用scheduler.shutdown()方法。 以上就是使用Quartz实现定时任务的基本流程。更多关于Quartz使用,请参考官方文档或其他教程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值