普通web整合quartz跑定時任務(wù)的示例
一.場景(什么時候用到定時任務(wù))
文件跑批,定時處理數(shù)據(jù),和業(yè)務(wù)解耦的場景
二.目前都有哪些工具可以定時處理數(shù)據(jù)
1.jdk的timertask:數(shù)據(jù)量小的情況下,單線程的
2.kettle:比較適合邏輯不復(fù)雜的數(shù)據(jù)推送
3.quartz:數(shù)據(jù)量大的情況下,分布式下的定時任務(wù)處理
三.如何集成
1.jar包下載
地址:http://chabaoo.cn/softs/539791.html
2.理解幾個核心概念
scheduler任務(wù)調(diào)度、Job任務(wù)、Trigger觸發(fā)器、JobDetail任務(wù)細(xì)節(jié)
Job任務(wù):
其實Job是接口,其中只有一個execute方法:
package org.quartz; public abstract interface Job { public abstract void execute(JobExecutionContext paramJobExecutionContext) throws JobExecutionException; }
我們開發(fā)者只要實現(xiàn)此接口,實現(xiàn)execute方法即可。把我們想做的事情,在execute中執(zhí)行即可。
JobDetail:
任務(wù)細(xì)節(jié),Quartz執(zhí)行Job時,需要新建個Job實例,但是不能直接操作Job類,所以通過JobDetail來獲取Job的名稱、描述信息。
Trigger觸發(fā)器:
執(zhí)行任務(wù)的規(guī)則;比如每天,每小時等。
一般情況使用SimpleTrigger,和CronTrigger,這個觸發(fā)器實現(xiàn)了Trigger接口。
對于復(fù)雜的時間表達式來說,比如每個月15日上午幾點幾分,使用CronTrigger
對于簡單的時間來說,比如每天執(zhí)行幾次,使用SimpleTrigger
scheduler任務(wù)調(diào)度:
最核心的概念,需要把JobDetail和Trigger注冊到scheduler中,才可以執(zhí)行。
四.配置示例
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:寫業(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.配置一個監(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)用時,注銷定時任務(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)用時,開啟定時任務(wù) public void contextInitialized(ServletContextEvent arg0) { try { scheduler = StdSchedulerFactory.getDefaultScheduler(); //在這里我編寫了三個定時任務(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(); //三個觸發(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(); } } //下面是定義三個觸發(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.在項目的web.xml配置監(jiān)聽器,初始化ApplicationContextListener
<listener> <listener-class>tcc.test.quartz.ApplicationContextListener</listener-class> </listener>
ServletContextListener:tomcat容器啟動時實例化,容器宕機時銷毀
運行結(jié)果:
五.在線cron表達式
到此這篇關(guān)于普通web整合quartz跑定時任務(wù)的文章就介紹到這了,更多相關(guān)web整合quartz定時任務(wù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
微信小程序中target和currentTarget的區(qū)別小結(jié)
這篇文章主要給大家介紹了關(guān)于微信小程序中target和currentTarget區(qū)別的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11JavaScript創(chuàng)建防篡改對象的方法分析
這篇文章主要介紹了JavaScript創(chuàng)建防篡改對象的方法,結(jié)合具體實例形式分析了javascript基于不可擴展對象、密封的對象和凍結(jié)的對象實現(xiàn)防篡改對象的相關(guān)操作技巧,需要的朋友可以參考下2018-12-12網(wǎng)頁禁用右鍵實現(xiàn)代碼(JavaScript代碼)
網(wǎng)頁禁用右鍵的代碼,我們可以不少網(wǎng)站在使用,讓別人復(fù)制什么的麻煩,但破解方法也比較簡單。這里就不說了,如果想知道的可以參考腳本之家以前發(fā)布的文章。2009-10-10