普通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/
变态一点的表达式:
每个月第二个周周六上午十点
0 0 10 ? * 6#2 *
秒 分 时 日 月 周 年
普通web整合quartz跑定时任务的更多相关文章
- springboot整合Quartz实现定时任务
1.maven依赖: <!--quartz--> <dependency> <groupId>org.quartz-scheduler</groupId> ...
- 【spring-boot】 springboot整合quartz实现定时任务
在做项目时有时候会有定时器任务的功能,比如某某时间应该做什么,多少秒应该怎么样之类的. spring支持多种定时任务的实现.我们来介绍下使用spring的定时器和使用quartz定时器 1.我们使用s ...
- SpringMVC整合Quartz实现定时任务以及Tomcat服务执行初始化定时任务
1.导入quartz.jar包,或者pom.xml 配置对应的依赖: <dependency> <groupId>org.quartz-scheduler</groupI ...
- Spring Boot整合Quartz实现定时任务表配置
最近有个小项目要做,spring mvc下的task设置一直不太灵活,因此在Spring Boot上想做到灵活的管理定时任务.需求就是,当项目启动的时候,如果有定时任务则加载进来,生成schedule ...
- spring整合quartz实现定时任务
需求:spring+mybatis框架已经搭建好,需要实现一个定时任务. 一:导出相应的jar包 quartz-all-1.6.5.jar获取quartz-alll-1.6.6.jar spring- ...
- Spring整合Quartz分布式定时任务
概述虽然单个Quartz实例能给予你很好的Job调度能力,但它不能满足典型的企业需求,如可伸缩性.高可靠性满足.假如你需要故障转移的能力并能运行日益增多的 Job,Quartz集群势必成为你应用的一部 ...
- Spring整合Quartz定时任务执行2次,Spring定时任务执行2次
Spring整合Quartz定时任务执行2次,Spring定时任务执行2次 >>>>>>>>>>>>>>>&g ...
- Spring 3整合Quartz 2实现手动设置定时任务:新增,修改,删除,暂停和恢复(附带源码)
摘要:在项目的管理功能中,对定时任务的管理有时会很常见.但一般定时任务配置都在xml中完成,包括cronExpression表达式,十分的方便.但是如果我的任务信息是保存在数据库的,想要动态的初始化, ...
- Spring整合Quartz定时任务 在集群、分布式系统中的应用(Mysql数据库环境)
Spring整合Quartz定时任务 在集群.分布式系统中的应用(Mysql数据库环境) 转载:http://www.cnblogs.com/jiafuwei/p/6145280.html 单个Q ...
随机推荐
- zabbix-mongodb监控脚本(高性能、低占用)
Zabbix调用脚本以实现对MongoDB的监控! 本脚本支持对服务存活状态.副本集.性能指标共计25个监控项! 使用mongostat和"echo rs.status()["me ...
- SpringMVC之RedirectAttributes属性
RedirectAttributes是SpringMVC3.1版本之后出来的一个新功能,专门用于重定向之后还能带参数跳转的的工具类. 两种带参方式: redirectAttributes.addAtt ...
- CodeForces 摆烂寄录
按订正顺序排序 现在是乱排的了 完整代码占版面 所以只放 AC 记录链接 Good Bye 2021: 2022 is NEAR 这场打得真拉/tuu A. 简单签到 开场就读错题,浪费 5min / ...
- Atcoder ARC-068
A 不难发现从 \(5\) 开始一直往 \(6\) 转再转回来是最优的,直接模拟即可. B 不难发现可以将多余部分直接贪心消去,最后必然会剩下两个或 \(1\) 个多余的数. 如果剩下两个,此时多余的 ...
- redis清缓存
先查询当前redis的服务是否已经启动 ps -ef|grep redis [root@guanbin-k8s-master ~]# ps -ef|grep redis redis 1557 1 0 ...
- Kubernetes GitOps 工具
Kubernetes GitOps Tools 译自:Kubernetes GitOps Tools 本文很好地介绍了GitOps,并给出了当下比较热门的GitOps工具. 简介 在本文中,将回顾一下 ...
- Mac下Charles踩坑记录
初次使用Charles,摸索着抓包的过程中遇到了很多问题.在这里一一记录一下,避免其他初学者踩坑. 问题1:不显示request和response? 在Charles的配置页面可以勾选是否把reque ...
- 帆软报表(finereport)使用Event 事件对象 (target)修改提示框样式
target 事件属性 Event 对象 定义和用法 target 事件属性可返回事件的目标节点(触发该事件的节点),如生成事件的元素.文档或窗口. 语法 event.target 定义结束事件Jav ...
- 5.1 Paralles 为虚拟机设置静态ip
一.配置独立ip的环境 前面研究了k8s的组件,核心概念,网络模型,都了解了一遍,现在就要进入实战了,摆在面前的一座大山,必须克服才行---虚拟机搭建,及网络环境配置. 先说说本文的运行环境: mac ...
- pycharm软件安装
目前热门的编程软件: 1.VScode 小巧轻便但是对小白不是很优化 2.sublime 时下最流行的代码编辑器,功能十分强大可以运行在windows.macOS和linux系统中,小白先不要使用 3 ...