Quartz延时任务实现

来源:互联网 发布:java 的io重要吗 编辑:程序博客网 时间:2024/06/12 05:46

业务场景:设定好的优惠卷在开始的时候推送给合适的用户

延时任务控件:Quartz

框架:SpringMVC + Spring + MyBatis


1.Quartz引入

    所需jar包:quartz-openejb-shade-2.2.1.jar

2.Task类实现

package com.its.modules.task;

import java.text.ParseException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.apache.openejb.quartz.Job;
import org.apache.openejb.quartz.JobExecutionContext;
import org.apache.openejb.quartz.JobExecutionException;
import org.apache.openejb.quartz.Scheduler;
import org.apache.openejb.quartz.SchedulerException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.its.common.utils.DateUtils;
import com.its.common.utils.SpringContextHolder;
import com.its.common.web.BaseController;
import com.its.modules.account.entity.Account;
import com.its.modules.account.service.AccountService;
import com.its.modules.operation.entity.CouponManage;
import com.its.modules.operation.entity.CouponManageUsers;
import com.its.modules.operation.entity.MemberDiscount;
import com.its.modules.operation.service.CouponManageService;
import com.its.modules.operation.service.CouponManageUsersService;
import com.its.modules.operation.service.MemberDiscountService;
import com.its.modules.sys.service.SysCodeMaxService;

/**
 * 优惠卷推送任务
 *
 * @author Liuhl
 *
 */
public class CouponTask extends BaseController implements Job {

    /** 日志对象 */
    protected Logger logger = LoggerFactory.getLogger(getClass());

    /** 优惠卷管理service */
    private CouponManageService couponManageService = SpringContextHolder.getBean(CouponManageService.class);

    private CouponManageUsersService couponManageUsersService = SpringContextHolder.getBean(CouponManageUsersService.class);

    private SysCodeMaxService sysCodeMaxService = SpringContextHolder.getBean(SysCodeMaxService.class);

    private MemberDiscountService memberDiscountService = SpringContextHolder.getBean(MemberDiscountService.class);

    private AccountService accountService = SpringContextHolder.getBean(AccountService.class);

    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
        logger.warn("---------优惠卷推送开始----优惠卷ID:-----------" + context.getJobDetail().getKey().getName());

        try {
            // 业务逻辑

            // 调度销毁
            Scheduler scheduler = context.getScheduler();
            scheduler.deleteJob(context.getJobDetail().getKey());
            logger.warn("---------优惠卷推送任务销毁----优惠卷ID:-----------" + context.getJobDetail().getKey().getName());
            scheduler.shutdown();
            logger.warn("---------优惠卷推送正常结束----优惠卷ID:-----------" + context.getJobDetail().getKey().getName());
        } catch (SchedulerException e) {
            logger.warn("---------优惠卷推送异常----优惠卷ID:-----------" + context.getJobDetail().getKey().getName());
            e.printStackTrace();
        } catch (ParseException e) {
            logger.warn("---------优惠卷推送异常----优惠卷ID:-----------" + context.getJobDetail().getKey().getName());
            e.printStackTrace();
        }

    }
}

3.调用Task代码实现

  /**************** 启动定时任务,执行优惠券推送 ****************/
  JobDetail job = JobBuilder.newJob(CouponTask.class).withIdentity(couponManage.getId(), "CouponTaskGroup")
    .build();
  Trigger trigger = TriggerBuilder.newTrigger().withIdentity(couponManage.getId() + "_Trigger", "CouponTaskGroup")
    // .withSchedule(CronScheduleBuilder.cronSchedule("55 51 10 5 9
    // ? 2017")).build();
    .withSchedule(CronScheduleBuilder.cronSchedule("5 * * * * ?")).build();
  Scheduler scheduler = new StdSchedulerFactory().getScheduler();
  scheduler.start();
  scheduler.scheduleJob(job, trigger);

4.注意点

      1.quartz所管理的Task,spring无法管理,所以直接使用@Autowired注入Service的话会是null.故需要SpringContextHolder.getBean的形式

      2.cronSchedule表达式为秒 分 时 日 月 周 年

             "55 51 10 5 9 ? 2017" 这个代表 2017年9月5日10点51分55秒执行

   "5 * * * * ?" 这个代表每5秒执行

  3.如果只执行一次的任务记得销毁

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 手机安装软件慢怎么办 不兼容的应用程序怎么办 电脑键盘不兼容怎么办 电脑不兼容xp 怎么办 百度软件不兼容怎么办 手机版本不兼容怎么办 绝地求生不兼容怎么办 办公软件不兼容怎么办 软件不兼容怎么办vivo cpu超过主板功率怎么办 手机游戏下不了怎么办 硬件系统不兼容怎么办 系统主板不兼容怎么办 安装软件不兼容怎么办 win10驱动不尖锐怎么办 苹果内存太小怎么办 内存太小怎么办手机 苹果手机屏幕不能滑动怎么办 vivo手机软件不兼容怎么办 微信无法录音怎么办 手机卡住了怎么办vivo 好钱包闪退怎么办 闲鱼认证失败怎么办 闲鱼买了假门票怎么办 买黄金买到假的怎么办 闲鱼被买家骗了怎么办 闲鱼上小视频没法保存怎么办 qq空间无法查看怎么办 华为手机电池不耐用怎么办 内内被动过怎么办 hp电脑开机黑屏怎么办 网上开店快递费怎么办 保温杯外壳掉漆怎么办 拖鞋前面磨脚怎么办 塑料拖鞋磨脚怎么办 路由器进不去设置界面怎么办 手机号丢了微信登不上怎么办 电脑总是闪黑屏怎么办 支付宝破产钱怎么办 淘宝号码注册过怎么办 农行k宝怎么办信用卡