定时任务框架-quartz
依赖
<!-- 定时任务jar -->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.1.7</version>
</dependency>
任务调度类
/**
*
* @作者 陈祥
* @创建时间 2018年5月29日
* @功能描述 定时任务, 分配结算大小B 业务方法实现
*/
public class DistributeSettlementDateJobService { //非大B分销商佣金结算 时间 每个月 20 号3点 触发
private final String DATE_DISTRI = "0 0 3 20 * ?";
// 大B 每天整点30分触发
private final String DATE_B_DISTRI = "0 30 * * * ?";
// 检查订单过期 每分钟触发
private final String DATE_ORDER = "30 * * * * ?";
// 自动好评, 每天 4点触发
private final String DATE_OrderEvaluate = "0 0 4 * * ?";
// 自动收货, 每天 2点触发
private final String DATE_OrderTake = "0 0 3 * * ?"; public void DistributeSettlement() throws Exception { SchedulerFactory sf = new StdSchedulerFactory();
Scheduler sched = sf.getScheduler(); //结算小B 和 其他
JobDetail job = newJob(DistributeSettlementDateJobAll.class).withIdentity("job1", "group1").build();
Trigger trigger = newTrigger().withIdentity("trigger1", "group1").withSchedule(cronSchedule(DATE_DISTRI)).build();
sched.scheduleJob(job, trigger); //检查订单是否过期任务
job = newJob(OrderDateJob.class).withIdentity("job2", "group1").build();
trigger = newTrigger().withIdentity("trigger2", "group1").withSchedule(cronSchedule(DATE_ORDER)).build();
sched.scheduleJob(job, trigger); //结算大B
job = newJob(DistributeSettlementDateJobFoB.class).withIdentity("job3", "group1").build();
trigger = newTrigger().withIdentity("trigger3", "group1").withSchedule(cronSchedule(DATE_B_DISTRI)).build();
sched.scheduleJob(job, trigger); // 自动好评
job = newJob(OrderEvaluateDateJob.class).withIdentity("job4", "group1").build();
trigger = newTrigger().withIdentity("trigger4", "group1").withSchedule(cronSchedule(DATE_OrderEvaluate)).build();
sched.scheduleJob(job, trigger); // 自动收货
job = newJob(OrderTakeDateJob.class).withIdentity("job5", "group1").build();
trigger = newTrigger().withIdentity("trigger5", "group1").withSchedule(cronSchedule(DATE_OrderTake)).build();
sched.scheduleJob(job, trigger); sched.start();
} }
任务实现类,实现 job 接口, 重写 execute() 方法即可
package eidolon.time.service; import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Map; import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException; import bingosoft.metro.model.OrderModel;
import leap.orm.dao.Dao;
import utils.redis.RedisUtil; /**
*
* @作者 陈祥
* @创建时间 2018年5月31日
* @功能描述 定时检查是否有订单过期
*/
public class OrderDateJob implements Job { private final String mapName = "orderTime"; @Override
public void execute(JobExecutionContext arg0) throws JobExecutionException { RedisUtil redisUtil = RedisUtil.getRedisUtil();
Map<String, String> mapAll = redisUtil.getMapAll(mapName);
if (null != mapAll && mapAll.size() > 1) { ArrayList<String> ids = new ArrayList<>();
// 当前时间
long newTime = new Date().getTime();
for (String key : mapAll.keySet()) {
Long lowTime = Long.valueOf(mapAll.get(key));
if (newTime > lowTime) { ids.add(key);
System.err.println("删除过期:" + key);
}
}
if(ids != null && ids.size() > 0 ){
HashMap<String, Object> params = new HashMap<>();
params.put("orderId", ids);
Dao.get().doTransaction((s) -> {
// 数据库修改状态
OrderModel.dao().executeNamedUpdate("orderDateJob-updateOrder", params);
// 删除缓存
for (String id : ids) {
redisUtil.delKeyAndValueForMap(mapName, id);
} });
}
} else {
System.err.println("没有过期");
} }
}
定时任务框架-quartz的更多相关文章
- 震惊!Windows Service服务和定时任务框架quartz之间原来是这种关系……
过场CG: 接到公司领导的文件指示,“小熊”需要在6月底去海外执行一个行动代号为[定时任务]的营救计划,这个计划关系到公司某个项目的生死(数据安全漏洞),作战部拟定两个作战方案: 方案一:使用务定 ...
- 开源定时任务框架Quartz(一)
简介 Quartz是OpenSymphony开源组织的一个开源项目,定时任务框架,纯Java语言实现,最新版本为2.3.0. 设计模式 Quartz中使用的设计模式如下: 1.Builder模式 2. ...
- 开源定时任务框架Quartz(二)
概述 上一篇文章完成了第一个Quartz程序的编写,这篇从Quartz中的几个重要对象来更深一层认识Quartz框架. Job和JobDetail Job是Quartz中的一个接口,接口下只有exec ...
- 定时任务框架-quartz 时间配置
quartz定时任务时间设置: 这些星号由左到右按顺序代表 : * * * * * * * 格式: [秒] [分] [小时] [日] [月] [周] [年] * 表示所有值. 例如:在分的字段上设置 ...
- java定时任务框架Quartz入门与Demo搭建
- XXL-JOB原理--定时任务框架简介(一)
https://blog.csdn.net/qq924862077/article/details/82595948 https://blog.csdn.net/qq924862077/article ...
- atititt.java定时任务框架选型Spring Quartz 注解总结
atititt.java定时任务框架选型Spring Quartz 总结 1. .Spring Quartz (ati recomm) 1 2. Spring Quartz具体配置 2 2.1. 增 ...
- 定时任务框架Quartz-(一)Quartz入门与Demo搭建
注:本文来源于:是Guava不是瓜娃 <定时任务框架Quartz-(一)Quartz入门与Demo搭建> 一.什么是Quartz 什么是Quartz? Quartz是OpenSympho ...
- Quartz小记(一):Elastic-Job - 分布式定时任务框架
Elastic-Job是ddframe中dd-job的作业模块中分离出来的分布式弹性作业框架.去掉了和dd-job中的监控和ddframe接入规范部分.该项目基于成熟的开源产品Quartz和Zooke ...
随机推荐
- 剑指offer-高质量的代码
小结: 规范性:书写清晰.布局清晰.命名合理 完整性:完成基本功能.考虑边界条件.做好错误处理 鲁棒性:采取防御性编程.处理无效输入 面试这需要关注 输入参数的检查 错误处理和异常的方式(3种) 命名 ...
- JavaScript里的小妖精
JavaScript里的小妖精———this!! 关于this指向这个问题,活生生折磨了我一个下午,回来静下心捋顺一下,总结出来一下规律. 当然,this这个复杂的问题不是一句两句可以说清楚,作为菜鸟 ...
- 微信小程序使用canvas绘制图片的注意事项
1.单位换算问题,canvas的尺寸单位是px,所以单位需要做个换算,可以通过wx.getSystemInfo获取屏幕宽高(单位是px),微信小程序无论什么机型,屏幕宽度都是750rpx,因此可以做个 ...
- Fel表达式实践
项目背景 订单完成后,会由交易系统推送实时MQ消息给订单清算系统,告诉清算系统此订单交易完成,可以进行给商家结算等后续操作. 财务要求在交易推送订单到清算系统时和订单清算系统接收到订单消息后,需要按照 ...
- 用eclipse运行项目时怎么设置虚拟机内存大小
方法一: 打开eclipse,选择Window--Preferences...在对话框左边的树上双击Java,再双击InstalledJREs,在右边选择前面有对勾的JRE,再单击右边的“Edit”按 ...
- nginx安装及配置文件详解
一)nginx安装及模块讲解 1.1.nginx安装步骤 mkdir /soft wget http://nginx.org/download/nginx-1.12.0.tar.gz tar zxf ...
- 解决lazarus 多线程报错问题
很多人都在Windows中使用线程技术,然后同样的代码移植到Linux下一运行就出错.一开始不解其中的奥妙.既然Lazarus提供了TThread类,也没注明非要在Windows下使用.没道理在Lin ...
- python全局变量被覆盖的问题
下面的情况,foo全局变量会被局部变量覆盖掉,这样在其它地方使用的值就是空值. g_foo = '' #全局变量 def set(): g_foo = 'abc' # 给全局变量赋值 def use_ ...
- NLPIR
# coding: utf-8 import pynlpir from pynlpir import nlpir nlpir.Init(nlpir.PACKAGE_DIR, nlpir.UTF8_CO ...
- mysql 如何给root用户设置密码
用root 进入mysql后mysql>set password =password('你的密码');mysql>flush privileges;