quartz定时器依赖_springmvc+quartz 实现定时任务

package com.meta.wx.quartz;

import com.meta.wx.beans.SystemJob;

import com.meta.wx.utils.DateUtil;

import org.quartz.*;

import org.quartz.impl.StdSchedulerFactory;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.scheduling.quartz.SchedulerFactoryBean;

import org.springframework.stereotype.Service;

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.HashSet;/**

* 定时任务

* @author Administrator

* CronTrigger的作业 (Trigger的另一个分支)比较强大

* 基于日历的作业调度器 (如在每月的1号执行或每周一调用等)

* 而不像SimpleTrigger那样精确指定间隔时间,比SimpleTrigger更常用。

* Cront 表达式来设置调度的频率

* 秒 分 时 日 月 周 年 顺序设置

*

* Scheduler 的主要函数

* Date scheduleJob(JobDetail jobDetail,Trigger trigger) 绑定JobDetail和Trigger 返回最近一次要执行的时间

* void start() 启动

* void standby()挂起执行(可用start()开启)

* void shutdown()关闭*/@Servicepublic classJobTask {private Logger log= LoggerFactory.getLogger(JobTask.class);

@AutowiredprivateSchedulerFactoryBean schedulerFactoryBean;/**

* 启动任务

* @throws SchedulerException*/

publicboolean startJob(SystemJob sjob) throws SchedulerException{//创建Scheduler实例

Scheduler scheduler=schedulerFactoryBean.getScheduler();//创建一个JobDetail实例,绑定所建的作业

Class clazz= null;try{

clazz=Class.forName(sjob.getClasspath());

}catch(ClassNotFoundException e) {

e.printStackTrace();

}

JobDetail jobDetail=JobBuilder.newJob(clazz).build();//创建一个Trigger;

TriggerKey triggerKey=TriggerKey.triggerKey(sjob.getId(),Scheduler.DEFAULT_GROUP);

CronTrigger trigger=(CronTrigger)TriggerBuilder.newTrigger()

.withIdentity(triggerKey)

.withSchedule(//1.2018年内每天10点15分出发一次//可通过cront表达式在线生成http://cron.qqe2.com/

CronScheduleBuilder.cronSchedule(sjob.getCron())//参数为cront表达式(秒 分 时 日 月 周 年)

)

.build();

scheduler.scheduleJob(jobDetail,trigger);//绑定与触发器//启动任务

if(!scheduler.isShutdown()){

scheduler.start();

log.info("---任务["+triggerKey.getName()+"] 启动成功。。。");return true;

}else{

log.info("---任务["+triggerKey.getName()+"] 已启动,无需再次启动。。。");

}return false;

}/**

* 修改任务

* @param sjob

* @return

* @throws SchedulerException*/

publicboolean updateJob(SystemJob sjob) {//创建Scheduler实例

Scheduler scheduler=schedulerFactoryBean.getScheduler();

String createTime=DateUtil.getCurDate();try{

Class clazz=null;try{

clazz=Class.forName(sjob.getClasspath());

}catch(ClassNotFoundException e) {

e.printStackTrace();

}//创建一个JobDetail实例,绑定所建的作业(将该实例与HelloJobClass绑定)

JobDetail jobDetail=JobBuilder.newJob(clazz).build();//创建一个Trigger;

TriggerKey triggerKey=TriggerKey.triggerKey(sjob.getId(),Scheduler.DEFAULT_GROUP);if(scheduler.checkExists(triggerKey)){return false;

}

JobKey jobKey=JobKey.jobKey(sjob.getId(),Scheduler.DEFAULT_GROUP);

CronScheduleBuilder scheduleBuilder=CronScheduleBuilder.cronSchedule(sjob.getCron())

.withMisfireHandlingInstructionDoNothing();

CronTrigger trigger=TriggerBuilder.newTrigger().withIdentity(triggerKey)

.withDescription(createTime).withSchedule(scheduleBuilder).build();

JobDetail jobDetail1=scheduler.getJobDetail(jobKey);

HashSet triggerSet=new HashSet<>();

triggerSet.add(trigger);

scheduler.scheduleJob(jobDetail,triggerSet,true);

log.info("---任务[{}]更新成功---",triggerKey.getName());return true;

}catch(SchedulerException e) {

e.printStackTrace();throw newRuntimeException(e.getMessage());

}

}/**

* 删除

* @param job

* @return*/

publicboolean remove(SystemJob job){

Scheduler scheduler=schedulerFactoryBean.getScheduler();

TriggerKey triggerKey=TriggerKey.triggerKey(job.getId(),Scheduler.DEFAULT_GROUP);try{if(checkJob(job)){

scheduler.pauseTrigger(triggerKey);

scheduler.unscheduleJob(triggerKey);

log.info("---任务[{}]删除成功!",triggerKey.getName());return true;

}

}catch(SchedulerException e) {

e.printStackTrace();

}return false;

}/**

* true 存在 false 不存在

* @param job

* @return*/

publicboolean checkJob(SystemJob job){

Scheduler scheduler=schedulerFactoryBean.getScheduler();//触发器

TriggerKey triggerKey=TriggerKey.triggerKey(job.getId(),Scheduler.DEFAULT_GROUP);try{if(scheduler.checkExists(triggerKey)){return true;

}

}catch(SchedulerException e) {

e.printStackTrace();

}return false;

}

}

4.)任务启动线程类

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值