1. 添加quartz依赖 pom.xm

    <!-- 添加Quartz支持 -->
    <dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz</artifactId><version>2.2.1</version>
    </dependency>
    
  2. spring配置文件之quartz-context.xml,将此文件包含到spring的主配置文件里

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd"><bean id="stdSchedulerFactory" class="org.quartz.impl.StdSchedulerFactory"/></beans>
  1. Domain:定时任务的规则实体

    @Entity
    @Table(name = "t_task")
    public class Task{@Id@GeneratedValue(strategy = GenerationType.IDENTITY) // MYSQL时可以这样使用自增@Column(name = "PK")private Integer id;// 探测时长@Column(name = "DETECTION_TIME")private Integer detectionTime;// 探测时长@Column(name = "detection_time_unit")private Integer detectionTimeUnit;//探测时长单位@Column(name = "DETECTION_Date")private Date detectionDate;// 探测时长时间的转换@Column(name = "task_company")private Integer company;//探测周期@Column(name = "task_company_format")private String companyFormat;//探测周期转换@Column(name = "company_unit")private Integer companyUnit;//探测周期单位//省略getter好setter方法
    }
    
  2. Controller:控制器

    package com.cnitsec.mirana.task.quartz.controller;import com.cnitsec.mirana.task.quartz.service.JobService;
    import org.quartz.Job;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;/*** 类的注释** @Package com.cnitsec.mirana.task.quartz.controller* @ClassName JobController* @Description 定时任务控制器* @Author * @Date 2018-05-31 10:47*/@RestController
    @RequestMapping("/job")
    public class JobController {@Autowiredprivate JobService jobService;@RequestMapping("/quartzJob/{taskId}/{isQuartz}")public boolean quartzJob(@PathVariable String taskId, @PathVariable boolean isQuartz) {return jobService.quartzJob(taskId, isQuartz);}
    }
  3. Service:接口

    package com.cnitsec.mirana.task.quartz.service;/*** 接口注释** @Package com.cnitsec.mirana.task.quartz.service* @ClassName JobService* @Description 定时任务的接口* @Author * @Date 2018-05-31 10:48*/public interface JobService {boolean quartzJob(String taskId,boolean isQuartz);
    }
  4. ServiceImpl:接口实现类

    package com.cnitsec.mirana.task.quartz.service.impl;import com.cnitsec.mirana.task.domain.ConfigTask;
    import com.cnitsec.mirana.task.quartz.HelloJob;
    import com.cnitsec.mirana.task.quartz.job.TaskJob;
    import com.cnitsec.mirana.task.quartz.service.JobService;
    import com.cnitsec.mirana.task.service.ConfigTaskService;
    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.stereotype.Service;import java.util.Date;import static org.quartz.JobBuilder.newJob;
    import static org.quartz.TriggerBuilder.newTrigger;/*** 类的注释** @Package com.cnitsec.mirana.task.quartz.service.impl* @ClassName JobServiceImpl* @Description 定时任务实现类* @Author liyuzhi* @Date 2018-05-31 10:49*/
    @Service
    public class JobServiceImpl implements JobService {private final Logger logger = LoggerFactory.getLogger(HelloJob.class);@Autowiredprivate StdSchedulerFactory stdSchedulerFactory;@Autowiredprivate TaskService taskService;/*** 方法的注释** @return boolean 返货是否开启或者停止的结果状态* @description 开启或者停止job工作* @methodName quartzJob* @Param: taskId 前端传过来的任务Id* @Param: isQuartz 1.true为运行开启job 2.false 为停止job* @author liyuzhi* @createTime 2018-05-31 18:53* @version v1.0*/@Overridepublic boolean quartzJob(String taskId, boolean isQuartz) {try {Scheduler scheduler = getScheduler();if (isQuartz) {if (exists(taskId, scheduler)) {//开启job之前先,判断Job是否存在,如果存在直接返回return false;}startJob(taskId, scheduler);//开启job} else {if (notExists(taskId, scheduler)) {//停止job的操作之前先,判断Job是否存在,如果不存在直接返货false,return false;}stopJob(taskId, scheduler);//停止job}setQuartz(taskId, isQuartz);return true;} catch (SchedulerException e) {e.printStackTrace();return false;}}//停止job,private void stopJob(String taskId, Scheduler scheduler) throws SchedulerException {TriggerKey triggerKey = TriggerKey.triggerKey(taskId, taskId);scheduler.pauseTrigger(triggerKey);scheduler.unscheduleJob(triggerKey);scheduler.deleteJob(JobKey.jobKey(taskId, taskId));}//开启jobprivate void startJob(String taskId, Scheduler scheduler) throws SchedulerException {JobDetail jobDetail = newJob(TaskJob.class).withIdentity(taskId, taskId).build();//设置jobCronTrigger trigger = newTrigger().withIdentity(taskId, taskId).withSchedule(CronScheduleBuilder.cronSchedule(getTriggerTime(taskId))).endAt(getDetectionDate(taskId)).build();//设置job触发器scheduler.scheduleJob(jobDetail, trigger);startJob(scheduler);//开启定时任务,如果任务开启则直接返回}//获取运行的规则private String getTriggerTime(String taskId) {//下边的方法是自己具体的增删改查,需要自己去实现return taskService.findOne(Integer.parseInt(taskId)).getCompanyFormat();}//获取运行的延迟时间private Date getDetectionDate(String taskId) {//下边的方法是自己具体的增删改查,需要自己去实现return configTaskService.findOne(Integer.parseInt(taskId)).getDetectionDate();}//保存quartz的状态到数据库private void setQuartz(String taskId, boolean isQuartz) {Task task = taskService.findOne(Integer.parseInt(taskId));task.setQuartz(isQuartz);configTaskService.saveTask(task);}/*** 方法的注释** @return void* @description 如果定时任务没有开启。则调用此方法开启定时任务* @methodName startJob* @Param: scheduler* @author * @createTime 2018-05-31 13:54* @version v1.0*/private void startJob(Scheduler scheduler) throws SchedulerException {boolean started = scheduler.isStarted();if (!started) {scheduler.start();}}/*** 方法的注释** @return boolean* @description 判断Job是否存在* @methodName exists* @Param: taskId 任务Id* @Param: scheduler* @author * @createTime 2018-05-31 13:53* @version v1.0*/private boolean exists(String taskId, Scheduler scheduler) throws SchedulerException {boolean exists = scheduler.checkExists(JobKey.jobKey(taskId, taskId));if (exists) {logger.info("该Job已经存在了-----------------------------------------------");return true;}return false;}/*** 方法的注释** @return boolean* @description 当执行停止一个任务的时候先判断该任务是否存在,存在才可以执行停止一个任务。* @methodName notExists* @Param: taskId* @Param: scheduler* @author * @createTime 2018-05-31 13:55* @version v1.0*/private boolean notExists(String taskId, Scheduler scheduler) throws SchedulerException {boolean exists = scheduler.checkExists(JobKey.jobKey(taskId, taskId));if (!exists) {logger.info("该Job不存在-----------------------------------------------");return true;}return false;}private Scheduler getScheduler() throws SchedulerException {return stdSchedulerFactory.getScheduler();}
    }
  5. Job:具体的定时任务

    package com.cnitsec.mirana.task.quartz.job;import com.cnitsec.mirana.task.quartz.HelloJob;
    import com.cnitsec.mirana.task.service.ConfigTaskService;
    import org.quartz.Job;
    import org.quartz.JobExecutionContext;
    import org.quartz.JobExecutionException;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;/*** 类的注释** @Package com.cnitsec.mirana.task.quartz.job* @ClassName TaskJob* @Description 定时任务的JoB* @Author * @Date 2018-05-31 10:32*/public class TaskJob implements Job {private final Logger logger = LoggerFactory.getLogger(HelloJob.class);@Overridepublic void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {logger.info(jobExecutionContext.getJobDetail().getKey().getName() + "成功执行定时任务-------------------------------------------------");}
    }

Quartz定时任务项目中的应用相关推荐

  1. Quartz在Spring中设置动态定时任务 .

    什么是动态定时任务: 是由客户制定生成的,服务端只知道该去执行什么任务,但任务的定时是不确定的(是由客户制定).这样总不能修改配置文件每定制个定时任务就增加一个trigger吧,即便允许客户修改配置文 ...

  2. 在Spring项目中使用@Scheduled注解定义简单定时任务

    如题所示,有时候我们需要在Web项目中配置简单的定时任务,而且因为任务并不复杂不想使用定时调度框架(PS:Quartz.ActiveMQ .Kafka等),这时就可以考虑使用@Scheduled注解来 ...

  3. SpringMvc整合Quartz实现定时任务项目源码

             项目中一直使用Quartz做定时任务,但是一直没有去仔细阅读详细参数配置说明以及它源码,最近花了一点时间做了一个整理.系统的看了一下源码实现并顺手做了一个简单的Demo. 一.说明 ...

  4. Spring整合Quartz定时任务 在集群、分布式系统中的应用

    点击上方"Java知音",选择"置顶公众号" 技术文章第一时间送达! 作者:sundoctor www.iteye.com/blog/sundoctor-486 ...

  5. java 定时任务怎么关闭_浅谈springboot项目中定时任务如何优雅退出

    在一个springboot项目中需要跑定时任务处理批数据时,突然有个Kill命令或者一个Ctrl+C的命令,此时我们需要当批数据处理完毕后才允许定时任务关闭,也就是当定时任务结束时才允许Kill命令生 ...

  6. java quartz管理,SpringBoot中使用Quartz管理定时任务的方法

    定时任务在系统中用到的地方很多,例如每晚凌晨的数据备份,每小时获取第三方平台的 Token 信息等等,之前我们都是在项目中规定这个定时任务什么时候启动,到时间了便会自己启动,那么我们想要停止这个定时任 ...

  7. spring boot项目中处理Schedule定时任务

    默认,springboot已经支持了定时任务Schedule模块,所以一般情况已经完全能够满足我们的实际需求,一般来说,没有必要在加入其他类似于:quartz 另外,在这里提一个实际项目中,关于定时任 ...

  8. 项目中使用Quartz集群分享--转载

    原文:http://hot66hot.iteye.com/blog/1726143 在公司分享了Quartz,发布出来,希望大家讨论补充. CRM使用Quartz集群分享  一:CRM对定时任务的依赖 ...

  9. scheduled每天下午1点执行一次_在Spring Boot项目中使用@Scheduled注解实现定时任务...

    在java开发中定时任务的实现有多种方式,jdk有自己的定时任务实现方式,很多框架也有定时任务的实现方式.这里,我介绍一种很简单的实现方式,在Spring Boot项目中使用两个注解即可实现. 在sp ...

最新文章

  1. ASIC与FPGA能达到的频率差异巨大是为什么
  2. 新型脑-脑接口,实现“阿凡达”式的跨鼠遥控
  3. C++ STL泛型编程——在ACM中的运用
  4. python树结构_Python-简单的树结构实现
  5. 关于 IPv6 大规模部署,给我们带来了什么~
  6. MySQL查询count(*)、count(1)、count(field)的区别收集
  7. Emacs中的Color Theme以及字体设置
  8. 程序员谈谈我的职场观(一)
  9. iOS编写最简单的界面切换应用
  10. 【ArcGis for javascript从零开始】之一 ArcGis加载天地图
  11. Windows 系统 重装为Linux 记录
  12. 3.3通过EmbeddedServletContainerCustomizer调用Tomcat
  13. 基于 InVEST 模型的水涵养功能评估数据获取
  14. Vue el-menu-item路由跳转
  15. volatility使用
  16. PS改变icon图标颜色
  17. 右键文件用指定软件打开
  18. Carson带你学Android:源码解析自定义View Draw过程
  19. 基于51单片机万年历可调电子时钟闹钟温度(实物图+源码+仿真+原理图+论文)
  20. 策测解金:黄金突破箱体,别错过回调就是多

热门文章

  1. 从云计算到固态硬盘 颠覆性技术成熟度分析
  2. 把飞书融入日常学习流程:一个人的飞书也挺好
  3. ElasticSerach7.15.2插件中文分词器(IK+pinyin)
  4. java毕业设计题目
  5. 2020-10-15(重力场、拖拽、轮播图)
  6. 模拟重力场(多方向运动+碰撞检测+重力加速度+能量损失)
  7. kali 镜像阿里云下载地址
  8. Qt编写4K/8K大分辨率播放器(8K占用1%CPU)
  9. 调度生产过程的思路、原则、方法
  10. win32 007