您当前的位置: 首页 >  ar

qq_34412985

暂无认证

  • 0浏览

    0关注

    1061博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

quartz核心原理及实战使用

qq_34412985 发布时间:2020-02-05 14:16:07 ,浏览量:0

  1. 今日大纲
  1. 学习Quartz
  2. 基于Quartz实现定时关闭超时未付款的订单
  3. 基于Solr实现商品的搜索
    1. 爬虫抓到的京东的商品数据、图片
  4. Quartz
    1. 大纲
  • Quartz是什么?
  • 简单的一些例子
  • Quartz框架学习
    1. Quartz是什么

简单的认为Quartz是是一个定时器。

    1. 下载
  • http://www.quartz-scheduler.org/downloads

    1. 核心接口

    1. Tigger
  • SimpleTrigger
    • 简单的触发
  • CronTrigger
    • 表达式触发
      1. SimpleTrigger

 

      1. CronTrigger

    1. Cron Expressions

 

    1. 表达式生成工具

这个工具不完美:

  1. 缺少秒
  2. 缺少L、W表达式
  1. 学习Quartz
    1. 导入quartz

    1. 依赖

    1. 示例
      1. Job

public class HelloJob implements Job {

    private static Logger _log = LoggerFactory.getLogger(HelloJob.class);

    /**

     *

     * Empty constructor for job initilization

     *

     *

     * Quartz requires a public empty constructor so that the

     * scheduler can instantiate the class whenever it needs.

     *

     */

    public HelloJob() {

    }

    /**

     *

     * Called by the {@link org.quartz.Scheduler} when a

     * {@link org.quartz.Trigger} fires that is associated with

     * the Job.

     *

     * @throws JobExecutionException

     *             if there is an exception while executing the job.

     */

    public void execute(JobExecutionContext context)

        throws JobExecutionException {

        // Say Hello to the World and display the date/time

        _log.info("Hello World! - " + new Date());

    }

}

      1. 简单触发示例

public class SimpleExample {

    public void run() throws Exception {

        Logger log = LoggerFactory.getLogger(SimpleExample.class);

        log.info("------- Initializing ----------------------");

        // 定义调度器

        SchedulerFactory sf = new StdSchedulerFactory();

        Scheduler sched = sf.getScheduler();

        log.info("------- Initialization Complete -----------");

        // 获取当前时间的下一分钟

        Date runTime = evenMinuteDate(new Date());

        log.info("------- Scheduling Job  -------------------");

        // 定义job

        // 在quartz中,有组的概念,组+job名称 唯一的

        JobDetail job = newJob(HelloJob.class).withIdentity("job1", "group1").build();

        // 定义触发器,在下一分钟启动

        Trigger trigger = newTrigger().withIdentity("trigger1", "group1").startAt(runTime).build();

        // 将job注册到调度器

        sched.scheduleJob(job, trigger);

        log.info(job.getKey() + " will run at: " + runTime);

        // 启动调度器

        sched.start();

        log.info("------- Started Scheduler -----------------");

        // 等待65秒

        log.info("------- Waiting 65 seconds... -------------");

        try {

            // wait 65 seconds to show job

            Thread.sleep(65L * 1000L);

            // executing...

        } catch (Exception e) {

            //

        }

        // 关闭调度器

        log.info("------- Shutting Down ---------------------");

        sched.shutdown(true);

        log.info("------- Shutdown Complete -----------------");

    }

    public static void main(String[] args) throws Exception {

        SimpleExample example = new SimpleExample();

        example.run();

    }

}

      1. 表达式触发示例

public class SimpleCronExample {

    public void run() throws Exception {

        Logger log = LoggerFactory.getLogger(SimpleCronExample.class);

        log.info("------- Initializing ----------------------");

        // 定义调度器

        SchedulerFactory sf = new StdSchedulerFactory();

        Scheduler sched = sf.getScheduler();

        log.info("------- Initialization Complete -----------");

        // 获取当前时间的下一分钟

        Date runTime = evenMinuteDate(new Date());

        log.info("------- Scheduling Job  -------------------");

        // 定义job

        JobDetail job = newJob(HelloJob.class).withIdentity("job1", "group1").build();

        // 定义触发器,每2秒执行一次

        Trigger trigger = newTrigger().withIdentity("trigger1", "group1")

                .withSchedule(cronSchedule("0/5 * * * * ?")).build();

        // 将job注册到调度器

        sched.scheduleJob(job, trigger);

        log.info(job.getKey() + " will run at: " + runTime);

        // 启动调度器

        sched.start();

        log.info("------- Started Scheduler -----------------");

        // 等待1分钟

        log.info("------- Waiting 60 seconds... -------------");

        try {

            Thread.sleep(60L * 1000L);

        } catch (Exception e) {

            //

        }

        // 关闭调度器

        log.info("------- Shutting Down ---------------------");

        sched.shutdown(true);

        log.info("------- Shutdown Complete -----------------");

    }

    public static void main(String[] args) throws Exception {

        SimpleCronExample example = new SimpleCronExample();

        example.run();

    }

}

    1. 通过Spring使用Quartz
      1. 导入依赖

      1. 编写Job

      1. 编写配置文件文
  1. 定义job
  2. 定义触发
  3. 定义调度器,并且注册触发
      1. 启动Spring容器(启动调度器)

    1. 触发和job之间关系

一个触发能都多个job吗? 不能!

一个job能有多个触发吗? 是的!

  1. 关闭超时2天未付款的订单
    1. 分析
  1. 在订单系统中导入相关的依赖
  2. 定义job
    1. 扫描订单表,修改订单的状态为关闭状态
    2. 扫描条件:创建时间
关注
打赏
1653291990
查看更多评论
立即登录/注册

微信扫码登录

0.0461s