最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

普通web整合quartz跑定時(shí)任務(wù)的示例

 更新時(shí)間:2022年03月08日 09:14:47   作者:武魂95級藍(lán)銀草  
這篇文章主要介紹了普通web整合quartz跑定時(shí)任務(wù),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

一.場景(什么時(shí)候用到定時(shí)任務(wù))

文件跑批,定時(shí)處理數(shù)據(jù),和業(yè)務(wù)解耦的場景

二.目前都有哪些工具可以定時(shí)處理數(shù)據(jù)

1.jdk的timertask:數(shù)據(jù)量小的情況下,單線程的

2.kettle:比較適合邏輯不復(fù)雜的數(shù)據(jù)推送

3.quartz:數(shù)據(jù)量大的情況下,分布式下的定時(shí)任務(wù)處理

三.如何集成

1.jar包下載

地址:http://m.fzitv.net/softs/539791.html

2.理解幾個(gè)核心概念

scheduler任務(wù)調(diào)度、Job任務(wù)、Trigger觸發(fā)器、JobDetail任務(wù)細(xì)節(jié)

Job任務(wù)
其實(shí)Job是接口,其中只有一個(gè)execute方法:

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

我們開發(fā)者只要實(shí)現(xiàn)此接口,實(shí)現(xiàn)execute方法即可。把我們想做的事情,在execute中執(zhí)行即可。

JobDetail
任務(wù)細(xì)節(jié),Quartz執(zhí)行Job時(shí),需要新建個(gè)Job實(shí)例,但是不能直接操作Job類,所以通過JobDetail來獲取Job的名稱、描述信息。

Trigger觸發(fā)器
執(zhí)行任務(wù)的規(guī)則;比如每天,每小時(shí)等。
一般情況使用SimpleTrigger,和CronTrigger,這個(gè)觸發(fā)器實(shí)現(xiàn)了Trigger接口。
對于復(fù)雜的時(shí)間表達(dá)式來說,比如每個(gè)月15日上午幾點(diǎn)幾分,使用CronTrigger
對于簡單的時(shí)間來說,比如每天執(zhí)行幾次,使用SimpleTrigger

scheduler任務(wù)調(diào)度
最核心的概念,需要把JobDetail和Trigger注冊到scheduler中,才可以執(zhí)行。

 四.配置示例

1.模擬新建一個(gè)工作

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:寫業(yè)務(wù)邏輯
 */
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.配置一個(gè)監(jiān)聽器,模擬初始化任務(wù),處理db數(shù)據(jù)

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)
     */
    //關(guān)閉Web應(yīng)用時(shí),注銷定時(shí)任務(wù)
    public void contextDestroyed(ServletContextEvent arg0) {
        try {
            scheduler.shutdown();
            System.out.println("scheduler.shutdown");
        } catch (SchedulerException e) {
            e.printStackTrace();
        }
    }

    /**
     * @see ServletContextListener#contextInitialized(ServletContextEvent)
     */
    //開啟Web應(yīng)用時(shí),開啟定時(shí)任務(wù)
    public void contextInitialized(ServletContextEvent arg0) {
        try {
            scheduler = StdSchedulerFactory.getDefaultScheduler();
//在這里我編寫了三個(gè)定時(shí)任務(wù)
            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();
            //三個(gè)觸發(fā)器
            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();
        }


    }

    //下面是定義三個(gè)觸發(fā)器的靜方法
    public static Trigger updateTheStatus() {
        //每天的19:18分開始執(zhí)行,每天執(zhí)行一次
        Trigger trigger =TriggerBuilder.newTrigger()
                .withIdentity("trigger1", "group1")
                .withSchedule(CronScheduleBuilder.cronSchedule("0 18 19 * * ? "))
                .startNow()
                .build();
        return trigger;
    }

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

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


}

3.在項(xiàng)目的web.xml配置監(jiān)聽器,初始化ApplicationContextListener 

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

ServletContextListener:tomcat容器啟動時(shí)實(shí)例化,容器宕機(jī)時(shí)銷毀
運(yùn)行結(jié)果:

 五.在線cron表達(dá)式

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

到此這篇關(guān)于普通web整合quartz跑定時(shí)任務(wù)的文章就介紹到這了,更多相關(guān)web整合quartz定時(shí)任務(wù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

三原县| 通江县| 浙江省| 昭苏县| 临夏县| 巢湖市| 西吉县| 丹东市| 临沂市| 金川县| 从化市| 民丰县| 务川| 广东省| 锡林郭勒盟| 新巴尔虎右旗| 志丹县| 玛沁县| 惠州市| 西畴县| 嵊泗县| 日土县| 卫辉市| 宜良县| 丰台区| 巴里| 郸城县| 晋州市| 封开县| 江山市| 普格县| 都兰县| 庄浪县| 永定县| 南昌县| 定兴县| 胶南市| 桦南县| 丹巴县| 丘北县| 拉孜县|