定时任务框架-quartz

依赖

                <!-- 定时任务jar -->
        <dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz</artifactId>
            <version>2.1.7</version>
        </dependency>            

任务调度类

 1 /**
 2  *
 3  * @作者 陈祥
 4  * @创建时间 2018年5月29日
 5  * @功能描述 定时任务, 分配结算大小B 业务方法实现
 6  */
 7 public class DistributeSettlementDateJobService  {
 8
 9     //非大B分销商佣金结算 时间  每个月 20 号3点 触发
10     private final String DATE_DISTRI = "0 0 3 20 * ?";
11     // 大B  每天整点30分触发
12     private final String DATE_B_DISTRI = "0 30 * * * ?";
13     // 检查订单过期  每分钟触发
14     private final String DATE_ORDER =  "30 * * * * ?";
15     // 自动好评, 每天 4点触发
16     private final String DATE_OrderEvaluate =  "0 0 4 * * ?";
17     // 自动收货, 每天 2点触发
18     private final String DATE_OrderTake =  "0 0 3 * * ?";
19
20     public void DistributeSettlement() throws Exception {
21
22         SchedulerFactory sf = new StdSchedulerFactory();
23         Scheduler sched = sf.getScheduler();
24
25         //结算小B 和 其他
26         JobDetail job = newJob(DistributeSettlementDateJobAll.class).withIdentity("job1", "group1").build();
27         Trigger trigger = newTrigger().withIdentity("trigger1", "group1").withSchedule(cronSchedule(DATE_DISTRI)).build();
28         sched.scheduleJob(job, trigger);
29
30         //检查订单是否过期任务
31         job = newJob(OrderDateJob.class).withIdentity("job2", "group1").build();
32         trigger = newTrigger().withIdentity("trigger2", "group1").withSchedule(cronSchedule(DATE_ORDER)).build();
33         sched.scheduleJob(job, trigger);
34
35         //结算大B
36         job = newJob(DistributeSettlementDateJobFoB.class).withIdentity("job3", "group1").build();
37         trigger = newTrigger().withIdentity("trigger3", "group1").withSchedule(cronSchedule(DATE_B_DISTRI)).build();
38         sched.scheduleJob(job, trigger);
39
40         // 自动好评
41         job = newJob(OrderEvaluateDateJob.class).withIdentity("job4", "group1").build();
42         trigger = newTrigger().withIdentity("trigger4", "group1").withSchedule(cronSchedule(DATE_OrderEvaluate)).build();
43         sched.scheduleJob(job, trigger);
44
45         // 自动收货
46         job = newJob(OrderTakeDateJob.class).withIdentity("job5", "group1").build();
47         trigger = newTrigger().withIdentity("trigger5", "group1").withSchedule(cronSchedule(DATE_OrderTake)).build();
48         sched.scheduleJob(job, trigger);
49
50
51
52
53
54
55
56
57         sched.start();
58     }
59
60 }

任务实现类,实现 job 接口, 重写 execute() 方法即可

 1 package eidolon.time.service;
 2
 3 import java.util.ArrayList;
 4 import java.util.Date;
 5 import java.util.HashMap;
 6 import java.util.Map;
 7
 8 import org.quartz.Job;
 9 import org.quartz.JobExecutionContext;
10 import org.quartz.JobExecutionException;
11
12 import bingosoft.metro.model.OrderModel;
13 import leap.orm.dao.Dao;
14 import utils.redis.RedisUtil;
15
16 /**
17  *
18  * @作者 陈祥
19  * @创建时间 2018年5月31日
20  * @功能描述 定时检查是否有订单过期
21  */
22 public class OrderDateJob implements Job {
23
24     private final String mapName = "orderTime";
25
26     @Override
27     public void execute(JobExecutionContext arg0) throws JobExecutionException {
28
29         RedisUtil redisUtil = RedisUtil.getRedisUtil();
30         Map<String, String> mapAll = redisUtil.getMapAll(mapName);
31         if (null != mapAll && mapAll.size() > 1) {
32
33             ArrayList<String> ids = new ArrayList<>();
34             // 当前时间
35             long newTime = new Date().getTime();
36             for (String key : mapAll.keySet()) {
37                 Long lowTime = Long.valueOf(mapAll.get(key));
38                 if (newTime > lowTime) {
39
40                     ids.add(key);
41                     System.err.println("删除过期:" + key);
42                 }
43             }
44             if(ids  !=  null &&  ids.size() > 0 ){
45                 HashMap<String, Object> params = new HashMap<>();
46                 params.put("orderId", ids);
47                 Dao.get().doTransaction((s) -> {
48                     // 数据库修改状态
49                     OrderModel.dao().executeNamedUpdate("orderDateJob-updateOrder", params);
50                     // 删除缓存
51                     for (String id : ids) {
52                         redisUtil.delKeyAndValueForMap(mapName, id);
53                     }
54
55                 });
56             }
57         } else {
58             System.err.println("没有过期");
59         }
60
61     }
62 }

原文地址:https://www.cnblogs.com/cx987514451/p/9139065.html

时间: 2024-08-30 10:16:14

定时任务框架-quartz的相关文章

atititt.java定时任务框架选型Spring Quartz 注解总结

atititt.java定时任务框架选型Spring Quartz 总结 1. .Spring Quartz  (ati recomm) 1 2. Spring Quartz具体配置 2 2.1. 增加context,task命名空间xml: 2 2.2. 增加xsi:schemaLocation valide 2 2.3. 我们的task任务扫描注解in spr.xml 2 2.4. 设置运行方法 3 2.5. 设置输出日志 3 3. 运行测试sprX走ok兰. 4 4. Quartz Sch

QUARTZ.NET 一个定时任务框架

<1> Quartz.NET-1.0.3文件下载地址 (这是老版本了,现在已经有新版本了.用法好像不一样了) 首先要添加Quartz.NET-1.0.3 文件下面的  bin/3.5/Release/Quartz/ 目录下面的Common.Logging.dll文件和Quartz.dll文件 然后添加引用.将连个文件引入到项目中来 using Quartz; using Quartz.Impl; using System; using System.Collections.Generic; u

Quartz.Net的使用(简单配置方法)定时任务框架

Quartz.dll 安装nuget在线获取dll包管理器,从中获取最新版 Quartz.Net是一个定时任务框架,可以实现异常灵活的定时任务,开发人员只要编写少量的代码就可以实现“每隔1小时执行”.“每天22点执行”.“每月18日的下午执行8次”等各种定时任务. Quartz.Net中的概念:计划者(IScheduler).工作(IJob).触发器(Trigger).给计划者一个工作,让他在Trigger(什么条件下做这件事)触发的条件下执行这个工作 将要定时执行的任务的代码写到实现IJob接

spring框架整合使用定时任务框架java quartz的示例代码配置

原创整理不易,转载请注明出处:spring框架整合使用定时任务框架java quartz的示例代码配置 代码下载地址:http://www.zuidaima.com/share/1775583461723136.htm 有时候我们的任务(Job)需要再某些任务完成之后才能进行:例如从旧的数据库批量导数据的时候:需要现将被其他数据依赖的数据导入新的数据库:然后再进行关系的导入..在这种情况下我们就可以使用Quartz的listener来做文章了. 首先我们写一个主任务的类,命名为MainJob:她

集群式Quartz定时任务框架实践

在日常开发汇总,经常会遇到需要定时任务的场景,简单的,可以使用Spring的定时任务调度框架,也可以使用Quartz.无论使用哪种,都需要解决一个问题,那就是集群问题.一般情况下,定时任务能且仅能运行于一台应用实例上. 前提 本文工程基于spring boot 2.1.7.RELEASE 工程配置  一.pom依赖 如下图所示: 二.yml配置 yml配置如下图所示: 三.quartz.properties quartz相关属性配置如图: 注意: 1.重中之重,要设置org.quartz.job

Elastic-Job - 分布式定时任务框架

Elastic-Job是ddframe中dd-job的作业模块中分离出来的分布式弹性作业框架.去掉了和dd-job中的监控和ddframe接入规范部分. ddframe其他模块也有可独立开源的部分,之前当当曾开源过dd-soa的基石模块DubboX. 项目开源地址:https://github.com/dangdangdotcom/elastic-job Elastic-Job主要功能 定时任务: 基于成熟的定时任务作业框架Quartz cron表达式执行定时任务. 作业注册中心: 基于Zook

[转]Python定时任务框架APScheduler

APScheduler是基于Quartz的 一个Python定时任务框架,实现了Quartz的所有功能,使用起来十分方便.提供了基于日期.固定时间间隔以及crontab类型的任务,并且可以 持久化任务.基于这些功能,我们可以很方便的实现一个python定时任务系统,写python还是要比java舒服多了. 1. 安装 安装过程很简单,可以基于easy_install和源码. easy_install apscheduler 或者下载源码,运行命令: python setup.py install

Python定时任务框架APScheduler 3.0.3 Cron示例

APScheduler是基于Quartz的一个Python定时任务框架,实现了Quartz的所有功能,使用起来十分方便.提供了基于日期.固定时间间隔以及crontab类型的任务,并且可以持久化任务.基于这些功能,我们可以很方便的实现一个python定时任务系统. 安装 安装过程很简单,可以基于pip和源码. Pip install apscheduler==3.0.3 或者下载源码,运行命令: Python setup.py install cron job例子 1: #coding=utf-8

定时任务框架APScheduler学习详解

APScheduler简介 在平常的工作中几乎有一半的功能模块都需要定时任务来推动,例如项目中有一个定时统计程序,定时爬出网站的URL程序,定时检测钓鱼网站的程序等等,都涉及到了关于定时任务的问题,第一时间想到的是利用time模块的time.sleep()方法使程序休眠来达到定时任务的目的,虽然这样也可以,但是总觉得不是那么的专业,^_^所以就找到了python的定时任务模块APScheduler: APScheduler基于Quartz的一个Python定时任务框架,实现了Quartz的所有功