普通web整合quartz跑定时任务的示例

 更新时间:2022年03月08日 09:14:47   作者:武魂95级蓝银草  
这篇文章主要介绍了普通web整合quartz跑定时任务,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

一.场景(什么时候用到定时任务)

文件跑批,定时处理数据,和业务解耦的场景

二.目前都有哪些工具可以定时处理数据

1.jdk的timertask:数据量小的情况下,单线程的

2.kettle:比较适合逻辑不复杂的数据推送

3.quartz:数据量大的情况下,分布式下的定时任务处理

三.如何集成

1.jar包下载

地址:https://www.jb51.net/softs/539791.html

2.理解几个核心概念

scheduler任务调度、Job任务、Trigger触发器、JobDetail任务细节

Job任务
其实Job是接口,其中只有一个execute方法:

package org.quartz;
public abstract interface Job
{
public abstract void execute(JobExecutionContext paramJobExecutionContext) throws JobExecutionException;
}

我们开发者只要实现此接口,实现execute方法即可。把我们想做的事情,在execute中执行即可。

JobDetail
任务细节,Quartz执行Job时,需要新建个Job实例,但是不能直接操作Job类,所以通过JobDetail来获取Job的名称、描述信息。

Trigger触发器
执行任务的规则;比如每天,每小时等。
一般情况使用SimpleTrigger,和CronTrigger,这个触发器实现了Trigger接口。
对于复杂的时间表达式来说,比如每个月15日上午几点几分,使用CronTrigger
对于简单的时间来说,比如每天执行几次,使用SimpleTrigger

scheduler任务调度
最核心的概念,需要把JobDetail和Trigger注册到scheduler中,才可以执行。

 四.配置示例

1.模拟新建一个工作

package tcc.test.quartz;

import com.util.RowList;
import jos.engine.core.jdbc.JdbcTemplate;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import java.util.Date;
/**
 * Copyright (C) @2022
 *
 * @author: tcc
 * @version: 1.0
 * @date: 2022/3/7
 * @time: 18:20
 * @description:写业务逻辑
 */
public class TccJob implements Job {
    private static String sql = "select * from sr_main limit 100";
    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        System.out.println("hello"+new Date());
        JdbcTemplate jdbcTemplate = new JdbcTemplate();
        RowList rowList = jdbcTemplate.queryRowList(sql);
        for(int i=0;i<rowList.size();i++){
            System.out.println(rowList.get(i).get("mhzsfz"));
        }
    }
}

2.配置一个监听器,模拟初始化任务,处理db数据

package tcc.test.quartz;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import org.quartz.CronScheduleBuilder;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;
/**
 * Application Lifecycle Listener implementation class
 * ApplicationContextListener
 *
 */
public class ApplicationContextListener implements ServletContextListener {
    public static Scheduler scheduler = null;

    /**
     * Default constructor.
     */
    public ApplicationContextListener() {
        System.out.println("ApplicationContextListener起来了");
    }

    /**
     * @see ServletContextListener#contextDestroyed(ServletContextEvent)
     */
    //关闭Web应用时,注销定时任务
    public void contextDestroyed(ServletContextEvent arg0) {
        try {
            scheduler.shutdown();
            System.out.println("scheduler.shutdown");
        } catch (SchedulerException e) {
            e.printStackTrace();
        }
    }

    /**
     * @see ServletContextListener#contextInitialized(ServletContextEvent)
     */
    //开启Web应用时,开启定时任务
    public void contextInitialized(ServletContextEvent arg0) {
        try {
            scheduler = StdSchedulerFactory.getDefaultScheduler();
//在这里我编写了三个定时任务
            JobDetail updataTheStatus = JobBuilder.newJob(TccJob.class)
                    .withIdentity("updataTheStatus", "group1")
                    .build();

            JobDetail updateTheRemainer = JobBuilder.newJob(TccJob.class)
                    .withIdentity("updateTheRemainer", "group2")
                    .build();

            JobDetail deleteYstdayOrder = JobBuilder.newJob(TccJob.class)
                    .withIdentity("deleteYstdayOrder", "group3")
                    .build();
            //三个触发器
            Trigger trigger1 = updateTheStatus();
            Trigger trigger2 = updateTheRemainer();
            Trigger trigger3 = deleteYstdayOrder();
            //注册
            scheduler.scheduleJob(updataTheStatus, trigger1);
            scheduler.scheduleJob(updateTheRemainer, trigger2);
            scheduler.scheduleJob(deleteYstdayOrder, trigger3);
            scheduler.start();
            System.out.println("start");
        } catch (SchedulerException e) {
            e.printStackTrace();
        }


    }

    //下面是定义三个触发器的静方法
    public static Trigger updateTheStatus() {
        //每天的19:18分开始执行,每天执行一次
        Trigger trigger =TriggerBuilder.newTrigger()
                .withIdentity("trigger1", "group1")
                .withSchedule(CronScheduleBuilder.cronSchedule("0 18 19 * * ? "))
                .startNow()
                .build();
        return trigger;
    }

    public static Trigger updateTheRemainer() {
        //每天的19:18分开始执行,每天执行一次
        Trigger trigger =TriggerBuilder.newTrigger()
                .withIdentity("trigger2", "group2")
                .withSchedule(CronScheduleBuilder.cronSchedule("0 18 19 * * ? "))
                .startNow()
                .build();
        return trigger;
    }

    public static Trigger deleteYstdayOrder() {
        //每天的19:18分开始执行,每天执行一次
        Trigger trigger =TriggerBuilder.newTrigger()
                .withIdentity("trigger3", "group3")
                .withSchedule(CronScheduleBuilder.cronSchedule("0 18 19 * * ? "))
                .startNow()
                .build();
        return trigger;
    }


}

3.在项目的web.xml配置监听器,初始化ApplicationContextListener 

<listener>
        <listener-class>tcc.test.quartz.ApplicationContextListener</listener-class>
    </listener>

ServletContextListener:tomcat容器启动时实例化,容器宕机时销毁
运行结果:

 五.在线cron表达式

地址 https://cron.qqe2.com/

到此这篇关于普通web整合quartz跑定时任务的文章就介绍到这了,更多相关web整合quartz定时任务内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • JavaScript几种弹窗事件的使用

    JavaScript几种弹窗事件的使用

    这篇文章主要介绍了JavaScript几种弹窗事件的使用,弹窗事件就是在我们执行某操作的时候,弹出信息框给出提示。或收集数据的时候,弹出窗口收集信息,不想收集可以取消隐藏,下文介绍需要的朋友可以参考一下
    2022-02-02
  • json与jsonp知识小结(推荐)

    json与jsonp知识小结(推荐)

    这篇文章主要介绍了json与jsonp知识小结(推荐)的相关资料,需要的朋友可以参考下
    2016-08-08
  • 微信小程序中target和currentTarget的区别小结

    微信小程序中target和currentTarget的区别小结

    这篇文章主要给大家介绍了关于微信小程序中target和currentTarget区别的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • MVVM框架下实现分页功能示例

    MVVM框架下实现分页功能示例

    分页这种组件,几乎每一种框架都有这样的组件,这篇文章主要介绍了MVVM框架下实现分页功能示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • javascript关于“时间”的一次探索

    javascript关于“时间”的一次探索

    这篇文章主要介绍了javascript关于“时间”的一次探索,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • 使用JS+plupload直接批量上传图片到又拍云

    使用JS+plupload直接批量上传图片到又拍云

    本文详细介绍了通过js+plupload实现了绕过服务器,向又拍云批量上传图片的解决方法,十分的巧妙,也节省了服务器资源,这里推荐给有需要的小伙伴。
    2014-12-12
  • 微信小程序sessionid不一致问题解决

    微信小程序sessionid不一致问题解决

    这篇文章主要介绍了微信小程序sessionid不一致问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • JavaScript创建防篡改对象的方法分析

    JavaScript创建防篡改对象的方法分析

    这篇文章主要介绍了JavaScript创建防篡改对象的方法,结合具体实例形式分析了javascript基于不可扩展对象、密封的对象和冻结的对象实现防篡改对象的相关操作技巧,需要的朋友可以参考下
    2018-12-12
  • bootstrap下拉框动态赋值方法

    bootstrap下拉框动态赋值方法

    今天小编就为大家分享一篇bootstrap下拉框动态赋值方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-08-08
  • 网页禁用右键实现代码(JavaScript代码)

    网页禁用右键实现代码(JavaScript代码)

    网页禁用右键的代码,我们可以不少网站在使用,让别人复制什么的麻烦,但破解方法也比较简单。这里就不说了,如果想知道的可以参考脚本之家以前发布的文章。
    2009-10-10

最新评论