@SpringBootApplication@ImportResource(locations={"classpath:spring-mvc.xml"})public class QuartzCgqApplication {public static void main(String[] args) {SpringApplication.run(QuartzCgqApplication.class, args);}} 

4、配置执行类,和执行方法,这样,启动后会自动执行,这个类下面标记的方法,这里设置的是run方法,


package com.nswi.quartz;import com.nswi.entity.CgqCall;import com.nswi.entity.CgqType;import com.nswi.entity.CgqTypeDetails;import com.nswi.mapper.CgqTypeMapper;import com.nswi.mod.ModbusRtuMaster;import com.nswi.service.ICgqCallService;import com.nswi.service.ICgqTypeDetailsService;import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;import org.quartz.Scheduler;import org.quartz.SchedulerException;import org.quartz.TriggerKey;import org.quartz.impl.triggers.SimpleTriggerImpl;import org.springframework.beans.factory.annotation.Autowired;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;import java.util.List;/*** 描述:定时器类*/public class TestTask {public void run()  {System.out.println("执行了这个方法");}private Scheduler scheduler;public Scheduler getScheduler() {return scheduler;}public void setScheduler(Scheduler scheduler) {this.scheduler = scheduler;}public void restJob(long time) {TriggerKey triggerKey = new TriggerKey("testTrigger", Scheduler.DEFAULT_GROUP);SimpleTriggerImpl simpleTrigger = null;try {simpleTrigger = (SimpleTriggerImpl) scheduler.getTrigger(triggerKey);} catch (SchedulerException e) {e.printStackTrace();}simpleTrigger.setRepeatInterval(time);try {scheduler.rescheduleJob(triggerKey, simpleTrigger);} catch (SchedulerException e) {// TODO Auto-generated catch blocke.printStackTrace();}}} 

下面的配置,是为了动态调用方法,用来改变quartz执行的间隔时间

private Scheduler scheduler;public Scheduler getScheduler() {return scheduler;}public void setScheduler(Scheduler scheduler) {this.scheduler = scheduler;}public void restJob(long time) {TriggerKey triggerKey = new TriggerKey("testTrigger", Scheduler.DEFAULT_GROUP);SimpleTriggerImpl simpleTrigger = null;try {simpleTrigger = (SimpleTriggerImpl) scheduler.getTrigger(triggerKey);} catch (SchedulerException e) {e.printStackTrace();}simpleTrigger.setRepeatInterval(time);try {scheduler.rescheduleJob(triggerKey, simpleTrigger);} catch (SchedulerException e) {// TODO Auto-generated catch blocke.printStackTrace();}} 

5、动态调用接口,来改变quartz的执行间隔

其中value的taskJob来自于xml中的配置

@Autowired@Qualifier(value = "taskJob")private TestTask job;
    <property name="scheduler" ref="scheduler"></property></bean>
6、 完整的接口配置,如下所示,通过简单调用接口方式,动态调节定时器执行时间

@Autowired

@Qualifier(value = "taskJob")private TestTask job;//两分钟一次private static Long Time1 = 120000L;//五分钟一次private static Long Time2 = 300000L;//10分钟一次private static Long Time3 = 600000L;@GetMapping("/job/{time}/{key}")@ResponseBodypublic Result job(@PathVariable("time") Long time,@PathVariable("key") String key) {if (key.equals("wwjsj")&& time!=null) {if(time==2){System.out.println("调整为2分钟");job.restJob(Time1);}else  if(time==5){System.out.println("调整为5分钟");job.restJob(Time2);}else {System.out.println("调整为10分钟");job.restJob(Time3);}}System.out.println(time);return Result.ok(key);}
三、自定义定时器的启动,删除,暂停=================**工具类如下所示**1、定时器的增加的方法

private static SchedulerFactory schedulerFactory = new StdSchedulerFactory();

/*** @param jobName          任务名* @param jobGroupName     任务组名* @param triggerName      触发器名* @param triggerGroupName 触发器组名* @param jobClass         任务* @param cron             时间设置,参考quartz说明文档* @Description: 添加一个定时任务*///SuppressWarnings  用于抑制编译器产生警告信息@SuppressWarnings({"unchecked", "rawtypes"})public static void addJob(String jobName, String jobGroupName,String triggerName, String triggerGroupName, Class jobClass, String cron) {try {Scheduler sched = schedulerFactory.getScheduler();// 任务名,任务组,任务执行类JobDetail jobDetail = JobBuilder.newJob(jobClass).withIdentity(jobName, jobGroupName).build();// 触发器TriggerBuilder<Trigger> triggerBuilder = TriggerBuilder.newTrigger();// 触发器名,触发器组triggerBuilder.withIdentity(triggerName, triggerGroupName);triggerBuilder.startNow();// 触发器时间设定triggerBuilder.withSchedule(CronScheduleBuilder.cronSchedule(cron));// 创建Trigger对象CronTrigger trigger = (CronTrigger) triggerBuilder.build();// 调度容器设置JobDetail和Triggersched.scheduleJob(jobDetail, trigger);// 启动if (!sched.isShutdown()) {sched.start();}} catch (Exception e) {throw new RuntimeException(e);}}
2、定时器修改触发时间

/**

 * @param jobName* @param jobGroupName* @param triggerName      触发器名* @param triggerGroupName 触发器组名* @param cron             时间设置,参考quartz说明文档* @Description: 修改一个任务的触发时间*/public static void modifyJobTime(String jobName,String jobGroupName, String triggerName, String triggerGroupName, String cron) {try {Scheduler sched = schedulerFactory.getScheduler();TriggerKey triggerKey = TriggerKey.triggerKey(triggerName, triggerGroupName);CronTrigger trigger = (CronTrigger) sched.getTrigger(triggerKey);if (trigger == null) {return;}String oldTime = trigger.getCronExpression();if (!oldTime.equalsIgnoreCase(cron)) {/** 方式一 :调用 rescheduleJob 开始 */// 触发器TriggerBuilder<Trigger> triggerBuilder = TriggerBuilder.newTrigger();// 触发器名,触发器组triggerBuilder.withIdentity(triggerName, triggerGroupName);triggerBuilder.startNow();// 触发器时间设定triggerBuilder.withSchedule(CronScheduleBuilder.cronSchedule(cron));// 创建Trigger对象trigger = (CronTrigger) triggerBuilder.build();// 方式一 :修改一个任务的触发时间sched.rescheduleJob(triggerKey, trigger);/** 方式一 :调用 rescheduleJob 结束 *//** 方式二:先删除,然后在创建一个新的Job  *///JobDetail jobDetail = sched.getJobDetail(JobKey.jobKey(jobName, jobGroupName));//Class<? extends Job> jobClass = jobDetail.getJobClass();//removeJob(jobName, jobGroupName, triggerName, triggerGroupName);//addJob(jobName, jobGroupName, triggerName, triggerGroupName, jobClass, cron);/** 方式二 :先删除,然后在创建一个新的Job */}} catch (Exception e) {throw new RuntimeException(e);}}
3、移除某一任务

/**

 * @param jobName* @param jobGroupName* @param triggerName* @param triggerGroupName* @Description: 移除一个任务*/public static void removeJob(String jobName, String jobGroupName,String triggerName, String triggerGroupName) {try {Scheduler sched = schedulerFactory.getScheduler();TriggerKey triggerKey = TriggerKey.triggerKey(triggerName, triggerGroupName);sched.pauseTrigger(triggerKey);// 停止触发器sched.unscheduleJob(triggerKey);// 移除触发器sched.deleteJob(JobKey.jobKey(jobName, jobGroupName));// 删除任务} catch (Exception e) {throw new RuntimeException(e);}}
4、启动所有定时任务

/**

 * @Description:启动所有定时任务*/public static void startJobs() {try {Scheduler sched = schedulerFactory.getScheduler();sched.start();} catch (Exception e) {throw new RuntimeException(e);}}
5、关闭所有定时器

/**

 * @Description:关闭所有定时任务*/public static void shutdownJobs() {try {Scheduler sched = schedulerFactory.getScheduler();if (!sched.isShutdown()) {sched.shutdown();}} catch (Exception e) {throw new RuntimeException(e);}}
这个工具类完整的如下

package com.nswi.quartz;

import org.quartz.*;

import org.quartz.impl.StdSchedulerFactory;

public class QuartzManager {

private static SchedulerFactory schedulerFactory = new StdSchedulerFactory();/*** @param jobName          任务名* @param jobGroupName     任务组名* @param triggerName      触发器名* @param triggerGroupName 触发器组名* @param jobClass         任务* @param cron             时间设置,参考quartz说明文档* @Description: 添加一个定时任务*///SuppressWarnings  用于抑制编译器产生警告信息@SuppressWarnings({"unchecked", "rawtypes"})public static void addJob(String jobName, String jobGroupName,String triggerName, String triggerGroupName, Class jobClass, String cron) {try {Scheduler sched = schedulerFactory.getScheduler();// 任务名,任务组,任务执行类JobDetail jobDetail = JobBuilder.newJob(jobClass).withIdentity(jobName, jobGroupName).build();// 触发器TriggerBuilder<Trigger> triggerBuilder = TriggerBuilder.newTrigger();// 触发器名,触发器组triggerBuilder.withIdentity(triggerName, triggerGroupName);triggerBuilder.startNow();// 触发器时间设定triggerBuilder.withSchedule(CronScheduleBuilder.cronSchedule(cron));// 创建Trigger对象CronTrigger trigger = (CronTrigger) triggerBuilder.build();// 调度容器设置JobDetail和Triggersched.scheduleJob(jobDetail, trigger);// 启动if (!sched.isShutdown()) {sched.start();}} catch (Exception e) {throw new RuntimeException(e);}}/*** @param jobName* @param jobGroupName* @param triggerName      触发器名* @param triggerGroupName 触发器组名* @param cron             时间设置,参考quartz说明文档* @Description: 修改一个任务的触发时间*/public static void modifyJobTime(String jobName,String jobGroupName, String triggerName, String triggerGroupName, String cron) {try {Scheduler sched = schedulerFactory.getScheduler();TriggerKey triggerKey = TriggerKey.triggerKey(triggerName, triggerGroupName);CronTrigger trigger = (CronTrigger) sched.getTrigger(triggerKey);if (trigger == null) {return;}String oldTime = trigger.getCronExpression();if (!oldTime.equalsIgnoreCase(cron)) {/** 方式一 :调用 rescheduleJob 开始 */// 触发器TriggerBuilder<Trigger> triggerBuilder = TriggerBuilder.newTrigger();// 触发器名,触发器组triggerBuilder.withIdentity(triggerName, triggerGroupName);triggerBuilder.startNow();// 触发器时间设定triggerBuilder.withSchedule(CronScheduleBuilder.cronSchedule(cron));// 创建Trigger对象trigger = (CronTrigger) triggerBuilder.build();// 方式一 :修改一个任务的触发时间sched.rescheduleJob(triggerKey, trigger);/** 方式一 :调用 rescheduleJob 结束 *//** 方式二:先删除,然后在创建一个新的Job  *///JobDetail jobDetail = sched.getJobDetail(JobKey.jobKey(jobName, jobGroupName));//Class<? extends Job> jobClass = jobDetail.getJobClass();//removeJob(jobName, jobGroupName, triggerName, triggerGroupName);//addJob(jobName, jobGroupName, triggerName, triggerGroupName, jobClass, cron);/** 方式二 :先删除,然后在创建一个新的Job */}} catch (Exception e) {throw new RuntimeException(e);}}/*** @param jobName* @param jobGroupName* @param triggerName* @param triggerGroupName* @Description: 移除一个任务*/public static void removeJob(String jobName, String jobGroupName,String triggerName, String triggerGroupName) {try {Scheduler sched = schedulerFactory.getScheduler();TriggerKey triggerKey = TriggerKey.triggerKey(triggerName, triggerGroupName);sched.pauseTrigger(triggerKey);// 停止触发器sched.unscheduleJob(triggerKey);// 移除触发器sched.deleteJob(JobKey.jobKey(jobName, jobGroupName));// 删除任务} catch (Exception e) {throw new RuntimeException(e);}}/*** @Description:启动所有定时任务*/public static void startJobs() {try {Scheduler sched = schedulerFactory.getScheduler();sched.start();} catch (Exception e) {throw new RuntimeException(e);}}/*** @Description:关闭所有定时任务*/public static void shutdownJobs() {try {Scheduler sched = schedulerFactory.getScheduler();if (!sched.isShutdown()) {sched.shutdown();}} catch (Exception e) {throw new RuntimeException(e);}}

}

**执行的方法如下所示****1、执行的类继承Job类,然后实现它的excute方法**

MyJob implements Job


public class MyJob implements Job {@AutowiredCgqTypeMapper cgqTypeMapper;# 总结我个人认为,如果你想靠着背面试题来获得心仪的offer,用癞蛤蟆想吃天鹅肉形容完全不过分。想必大家能感受到面试越来越难,想找到心仪的工作也是越来越难,高薪工作羡慕不来,却又对自己目前的薪资不太满意,工作几年甚至连一个应届生的薪资都比不上,终究是错付了,错付了自己没有去提升技术。这些面试题分享给大家的目的,其实是希望大家通过大厂面试题分析自己的技术栈,给自己梳理一个更加明确的学习方向,当你准备好去面试大厂,你心里有底,大概知道面试官会问多广,多深,避免面试的时候一问三不知。大家可以把Java基础,JVM,并发编程,MySQL,Redis,Spring,Spring cloud等等做一个知识总结以及延伸,再去进行操作,不然光记是学不会的,这里我也提供一些脑图分享给大家:![](https://img-blog.csdnimg.cn/img_convert/ead1da67855c73a39d6c8854b1f05e9f.png)![](https://img-blog.csdnimg.cn/img_convert/f9f27195533ce3dbcb0820c50edbb37c.png)![](https://img-blog.csdnimg.cn/img_convert/9c5ec7e096c6baf0e39b1fb6e0fd96f1.png)希望你看完这篇文章后,不要犹豫,抓紧学习,复习知识,准备在明年的金三银四拿到心仪的offer,加油,打工人!actory.getScheduler();if (!sched.isShutdown()) {sched.shutdown();}} catch (Exception e) {throw new RuntimeException(e);}}}```**执行的方法如下所示****1、执行的类继承Job类,然后实现它的excute方法**```MyJob implements Job

public class MyJob implements Job {

@AutowiredCgqTypeMapper cgqTypeMapper;

总结

我个人认为,如果你想靠着背面试题来获得心仪的offer,用癞蛤蟆想吃天鹅肉形容完全不过分。想必大家能感受到面试越来越难,想找到心仪的工作也是越来越难,高薪工作羡慕不来,却又对自己目前的薪资不太满意,工作几年甚至连一个应届生的薪资都比不上,终究是错付了,错付了自己没有去提升技术。

这些面试题分享给大家的目的,其实是希望大家通过大厂面试题分析自己的技术栈,给自己梳理一个更加明确的学习方向,当你准备好去面试大厂,你心里有底,大概知道面试官会问多广,多深,避免面试的时候一问三不知。

大家可以把Java基础,JVM,并发编程,MySQL,Redis,Spring,Spring cloud等等做一个知识总结以及延伸,再去进行操作,不然光记是学不会的,这里我也提供一些脑图分享给大家:

[外链图片转存中…(img-JigB9x8b-1628235821799)]

[外链图片转存中…(img-fJmtoftc-1628235821801)]

[外链图片转存中…(img-r0OPmZHa-1628235821803)]

希望你看完这篇文章后,不要犹豫,抓紧学习,复习知识,准备在明年的金三银四拿到心仪的offer,加油,打工人!

领取资料只需要点击这里即可免费获取全部资料!

蚂蚁金服Java岗内推,quartz定时器的处理相关推荐

  1. 爆赞!蚂蚁金服Java岗内推,斩获offer

    前言 再过一周,马上将迎来新的一年,希望大家在2021年"牛气冲天,牛年大吉",一起迎接春暖花开之时. 金三银四马上就到了,很多粉丝朋友私信希望我出一篇面试专题或者分享面试相关的笔 ...

  2. 2021金九银十,蚂蚁金服Java岗内推

    前言 今年我也33了,离传说中不好找工作的35岁又更近了.说没有焦虑是对自己撒谎,于是我采访了一些人,自己思考了下,写下了这篇文章,希望能有些共鸣. 先看看大家的态度: 色老力衰,不好忽悠,不能带头加 ...

  3. 蚂蚁金服java研发内推电话面

    1.说一个最熟悉的排序算法,思想,复杂度. 2.计算机网络,tcp连接工作流程.三次握手. 3.服务器有很多连接,要查看当前连接我们服务器的连接的连接状态,怎样查.当前服务器有多少连接,这些连接是什么 ...

  4. 2017蚂蚁金服暑期实习生内推一面

    匆匆忙忙的蚂蚁金服一面,第一次面试实在是紧张,很多知识点都没能答完整,也不想找别的理由,就是自己太差了,面试结果很已经很明显了,gg... 慢慢成长吧,这都是必经之路! 3月1日内推系统开放,当天下午 ...

  5. 2022最新蚂蚁金服Java岗面试题库(整理版)

    前言 由于作者面试过程中高度紧张,本文中只列出了自己还记得的部分题目.笔者面的是阿里的Java研发工程师岗,面试流程是4轮技术面+1轮hr. 蚂蚁金服关于spring部分面试问题: 1.Spring ...

  6. 蚂蚁金服Java岗三面(电面.现场面.HR面)经验总结和分享

    面试内容如下: 一. 电面: 1.自我介绍 2.项目情况: (1.)对你来说影响最大的一个项目(该面试中有关项目问题都针对该项目展开)? (2.)为什么会想做这个项目?这个项目的ideal是谁提出来的 ...

  7. 阿里蚂蚁金服Java岗330道面试题(性能调优+微服务+并发编程+开源框架+分布式)

    前言 2019年还有不到2个月的时间就结束了,这一你,你收获了多少?  前段时间一直有粉丝问我,有没有今年一些大厂Java面试题总结?最新抽时间整理了一些,分享给大家,大家一起共享学习! 一.性能调优 ...

  8. 蚂蚁金服Java岗社招面试5面历程

    牛逼的来了! 一面: 介绍一下自己: 问项目经历, 聊"数据同步" 接着聊上了 K8S 的项目 有没有什么钻研得比较深的技术? kubernetes 的架构是怎么样的? golan ...

  9. java内存shell_2019蚂蚁金服Java后端三面,详述程序员必须掌握的架构底层原理

    前面的话 告别了2018 ,也早已正式进入2019 面试一直都是大家关注的热门话题,俗话说"金三银四",如今已经是三月份了,如果你打算在年后跳槽,那么是时候该着手准备了 很多Jav ...

最新文章

  1. SpringMVC中重定向
  2. 获取3的倍数_获取和设置pdf目录
  3. 深入理解Java:注解
  4. python非法语句是_python 如何优雅的处理大量异常语句?
  5. war 发布后页面不更新_吐槽 | 都发布一万年了,这游戏还不“更新”?
  6. 基于逻辑回归的标准评分卡实现
  7. 把数组变换成字符串(8)
  8. kali网络扫描、嗅探工具Nmap
  9. matlab实现三角形的外接圆与内接圆
  10. Messenger:使用消息的跨进程通信 (Message.replyTo()的使用)
  11. Atlassian Bamboo入门安装与使用
  12. 超神学院暗质计算机,超神学院之拳皇
  13. 使用Power BI时常见的几个问题(持续更新)
  14. python如何求积分_python 求定积分和不定积分示例
  15. 微信网页中点击图片放大
  16. OpenCV — 人脸识别
  17. 一文懂KL散度KL Divergence
  18. 在linux中安装浏览器吗,教你如何在 Linux 中安装 Microsoft Edge 浏览器
  19. [转]sessionStorage在同一网站多个标签页内共享数据吗?这取决于标签页如何打开
  20. it Ebook 免费

热门文章

  1. 在c语言中把x和y互换怎么编译,已知int x=10,y=12;编程将x和y的值相互交换
  2. python对钉钉考勤旷工的数据填入excel
  3. 流量不清零:用户开心,运营商无奈
  4. 如何在CentOS上配置虚拟IP地址 (VIP)
  5. BUAA-2021春-数据结构-综合作业-文本摘要生成(Hash实现 + SIMD优化 终测最速)
  6. 珍重了,我亲爱的朋友们
  7. DIY手动定制一个属于自己的软件安装管理器工具盘[二]
  8. html鼠标手状态,css鼠标样式cursor介绍(鼠标手型)
  9. [渝粤教育] 沈阳理工大学 电子商务基础与应用 参考 资料
  10. ARM服务器获取cpu信息,HPUX 查看系统信息(CPU,主机型号,物理内存等)