quartz使用案例

@Service
public class QuartzServiceImpl extends
        BaseServiceImpl<JobDetails, String, QuartzTaskVO> implements
        QuartzService {

    private JobDetailsJpaDao jobDetailsJpaDao;

    public JobDetailsJpaDao getJobDetailsJpaDao() {
        return jobDetailsJpaDao;
    }

    @Autowired
    public QuartzServiceImpl(JobDetailsJpaDao jobDetailsJpaDao,
            BaseJdbcDao baseJdbcDao) {
        super((BaseJpaRepository<JobDetails, String>) jobDetailsJpaDao,
                baseJdbcDao);
        this.jobDetailsJpaDao = jobDetailsJpaDao;
    }

    @Autowired
    private Scheduler scheduler;

    @ServiceDesc("查询当前活动的任务列表")
    @Override
    public Map<String, Object> queryActiveTaskMap(JobDetailsQueryParam param) {
        SQLQueryUtil util = new SQLQueryUtil();
        util.addTable("QRTZ_TRIGGERS");
        util.addColumn("SCHED_NAME", "schedule_name");
        util.addColumn("JOB_NAME", "job_name");
        util.addColumn("JOB_GROUP", "job_group");
        util.addColumn("TRIGGER_NAME", "trigger_name");
        util.addColumn("TRIGGER_GROUP", "trigger_group");
        util.addColumn("PREV_FIRE_TIME", "prev_fire_time");
        util.addColumn("NEXT_FIRE_TIME", "next_fire_time");
        util.addColumn("START_TIME", "start_time");
        util.addColumn("END_TIME", "end_time");
        util.addColumn("TRIGGER_STATE", "trigger_state");

        return super.queryDataMapNotExtend(util, QuartzTaskVO.class, param);
    }

    @Override
    @ServiceDesc("启动任务")
    public void startTask(String jobId, String triggerId) throws AppException {
        TaskId id = new TaskId(jobId, triggerId);
        try {
            scheduler.scheduleJob(id.getJobDetails().getJobDetail(), id
                    .getTriggers().getTrigger());
        } catch (SchedulerException e) {
            throw new AppException(ResultCode.Failure, e.getMessage());
        } catch (ClassNotFoundException e) {
            throw new AppException(ResultCode.Failure, e.getMessage());
        }
    }

    @Override
    @ServiceDesc("暂停任务")
    public void pauseTask(String... ids) throws AppException {
        try {
            for (String idStr : ids) {
                scheduler.pauseJob(new TaskId(idStr).getJobKey());
            }
        } catch (SchedulerException e) {
            throw new AppException(ResultCode.Failure, e.getMessage());
        }
    }

    @Override
    @ServiceDesc("恢复任务")
    public void resumeTask(String... ids) throws AppException {
        try {
            for (String idStr : ids) {
                scheduler.resumeJob(new TaskId(idStr).getJobKey());
            }
        } catch (SchedulerException e) {
            throw new AppException(ResultCode.Failure, e.getMessage());
        }
    }

    @Override
    @ServiceDesc("删除任务")
    public void deleteTask(String... ids) throws AppException {
        try {
            for (String idStr : ids) {
                scheduler.deleteJob(new TaskId(idStr).getJobKey());
            }
        } catch (SchedulerException e) {
            throw new AppException(ResultCode.Failure, e.getMessage());
        }
    }

}

class TaskId {

    /**
     * id字符串格式: jobName:jobGroup;triggerName:triggerGroup
     */
    public TaskId(String id) {
        this.jobKey = new JobKey(id.split(";")[0].split(":")[0],
                id.split(";")[0].split(":")[1]);
        this.triggerKey = new TriggerKey(id.split(";")[1].split(":")[0],
                id.split(";")[1].split(":")[1]);
    }

    public TaskId(String jobId, String triggerId) {
        JobDetailsService jobDetailsService = (JobDetailsService) SpringContextUtil
                .getUtil().getBean(JobDetailsService.class);
        TriggersService triggersService = (TriggersService) SpringContextUtil
                .getUtil().getBean(TriggersService.class);
        this.jobDetails = jobDetailsService.get(jobId);
        this.triggers = triggersService.get(triggerId);
        this.jobKey = new JobKey(jobDetails.getJobName(),
                jobDetails.getJobGroup());
        this.triggerKey = new TriggerKey(triggers.getTriggerName(),
                triggers.getTriggerGroup());
    }

    private JobDetails jobDetails;

    private Triggers triggers;

    private JobKey jobKey;

    private TriggerKey triggerKey;

    public JobDetails getJobDetails() {
        return jobDetails;
    }

    public void setJobDetails(JobDetails jobDetails) {
        this.jobDetails = jobDetails;
    }

    public Triggers getTriggers() {
        return triggers;
    }

    public void setTriggers(Triggers triggers) {
        this.triggers = triggers;
    }

    public JobKey getJobKey() {
        return jobKey;
    }

    public void setJobKey(JobKey jobKey) {
        this.jobKey = jobKey;
    }

    public TriggerKey getTriggerKey() {
        return triggerKey;
    }

    public void setTriggerKey(TriggerKey triggerKey) {
        this.triggerKey = triggerKey;
    }

}

时间: 2024-10-17 10:50:29

quartz使用案例的相关文章

初识Quartz(入门案例)+常用的Cron表达式

1.Quartz架构图 1.实体层 package cn.happy.entity; //1. public class Plan { //时间 private String date; //任务 private String task; public Plan(String date, String task) { this.date = date; this.task = task; } public Plan() { } @Override public String toString()

Quartz的基本使用之入门(2.3.0版本)

一.Quartz可以用来做什么 Quartz是一个强大任务调度框架,我工作时候会在这些情况下使用到quartz框架,当然还有很多的应用场景,在这里只列举2个实际用到的 餐厅系统会在每周四晚上的22点自动审核并生成报表 人事系统会在每天早晨8点给有待办的人员自动发送Email提醒 二.使用Quartz之前的准备 1.建立一个Maven项目 2.引入quartz的依赖 使用quartz,我们仅仅需要在maven的pom文件中添加依赖即可.我使用的是现在最新的一个版本2.3.0,大家可以在maven的

Quartz应用实践入门案例二(基于java工程)

在web应用程序中添加定时任务,Quartz的简单介绍可以参看博文<Quartz应用实践入门案例一(基于Web应用)> .其实一旦学会了如何应用开源框架就应该很容易将这中框架应用与自己的任何程序中.只要你的程序中需要这项功能!但是对于一些刚开始学习某种框架的菜鸟而言,这似乎就不是那么简单了.如果在学习开源框架API的同时,能有一两个案例小程序配着其API去看,那应该就是事半功倍了. 本文是在自己学习源码和网上查找资料的基础上完成的,将详细叙述在java工程中如何巧妙的融入Quartz框架,小案

quartz的CronExpression表达式详解和案例

http://www.cnblogs.com/pipi-changing/p/5697481.html 1. cron表达式格式: {秒数} {分钟} {小时} {日期} {月份} {星期} {年份(可为空)} 2. cron表达式各占位符解释: {秒数} ==> 允许值范围: 0~59 ,不允许为空值,若值不合法,调度器将抛出SchedulerException异常 "*" 代表每隔1秒钟触发: "," 代表在指定的秒数触发,比如"0,15,45&

SpringBoot2.x开发案例之整合Quartz任务管理系统

基于spring-boot 2.x + quartz 的CRUD任务管理系统,适用于中小项目. 基于spring-boot +quartz 的CRUD任务管理系统: https://gitee.com/52itstyle/spring-boot-quartz 开发环境 JDK1.8.Maven.Eclipse 技术栈 SpringBoot2.0.1.thymeleaf3.0.9.quartz2.3.0.iview.vue.layer.AdminLTE.bootstrap 启动说明 项目使用的数据

spring boot使用定时器框架Quartz案例

一.你需要在项目中加入quartz-all-2.1.7.jar的jar包(我这里使用spring boot环境) 二.然后需要新建一个类去注册定时任务和销毁定时任务,这个类需要实现ServletContextListener的接口中的contextInitialized和contextDestroyed方法 三.接着就是去定义你自己的定时任务了,也就是再去新建一个类去实现Job的接口中的execute()方法,这个方法就是你在定时任务执行的时候要执行的内容 1, SimpleTrigger 指定

quartz

查看官网提供的文档,关于quartz的一个小demo: 这里创建俩类. 1 import org.quartz.Job; 2 import org.quartz.JobExecutionContext; 3 import org.quartz.JobExecutionException; 4 5 import java.text.SimpleDateFormat; 6 import java.util.Date; 7 8 /** 9 * Created by yh on 2015/10/28.

大数据分析案例

部分数据来源于网络,如有侵权请告知. 一.大数据分析在商业上的应用 1.体育赛事预测 世界杯期间,谷歌.百度.微软和高盛等公司都推出了比赛结果预测平台.百度预测结果最为亮眼,预测全程64场比赛,准确率为67%,进入淘汰赛后准确率为94%.现在互联网公司取代章鱼保罗试水赛事预测也意味着未来的体育赛事会被大数据预测所掌控. “在百度对世界杯的预测中,我们一共考虑了团队实力.主场优势.最近表现.世界杯整体表现和博彩公司的赔率等五个因素,这些数据的来源基本都是互联网,随后我们再利用一个由搜索专家设计的机

自开发实现Quartz Web管理

网上能找到的QuartzWeb管理的资料都是使用的一个国外人写的Quartz WebApp的东东,功能也很全面.但是作为自己的应用其实用不了那么多功能,一般我们只要可以定义一个job,指定一个Cron表达式完成工作即可,附带的可以再对任务进行暂停与重启,基本就可以满足应用了.而且网上那个东西稍微还是有点复杂的,不方便集成的自己的项目中,无论是风格还是样式. 基于这样的原因,也是为了学习一个Quartz(以前还没有用到过).就想着做一个简单Quartz的Web管理工具.包括可以添加一个任务(添加的