SpringBoot+Quartz实现定时器,
由于本人也是刚学习,不足之处请各位大神指正 .. 

1.pom配置

  1.  
    <dependency>
  2.  
    <groupId>org.springframework</groupId>
  3.  
    <artifactId>spring-context-support</artifactId>
  4.  
    </dependency>
  5.  
    <dependency>
  6.  
    <groupId>org.springframework</groupId>
  7.  
    <artifactId>spring-tx</artifactId>
  8.  
    </dependency>
  9.  
    <dependency>
  10.  
    <groupId>org.quartz-scheduler</groupId>
  11.  
    <artifactId>quartz</artifactId>
  12.  
    <version>2.2.1</version>
  13.  
    </dependency>
  14.  
     
  15.  
     
  16.  
     

2.注册[pring-boot启动完成事件监听,用于启动job任务

  1.  
    @Configuration
  2.  
    public class SchedulerListener implements ApplicationListener<ContextRefreshedEvent> {
  3.  
    @Autowired
  4.  
    public MyScheduler myScheduler;
  5.  
    @Override
  6.  
    public void onApplicationEvent(ContextRefreshedEvent event) {
  7.  
    try {
  8.  
    myScheduler.scheduleJobs();
  9.  
    } catch (SchedulerException e) {
  10.  
    e.printStackTrace();
  11.  
    }
  12.  
    }
  13.  
    @Bean
  14.  
    public SchedulerFactoryBean schedulerFactoryBean(){
  15.  
    SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
  16.  
    return schedulerFactoryBean;
  17.  
    }
  18.  
    }
  19.  
     
  20.  
     

3、job参数设置

  1.  
    @Component
  2.  
    public class MyScheduler {
  3.  
    @Autowired
  4.  
    SchedulerFactoryBean schedulerFactoryBean;
  5.  
    public void scheduleJobs() throws SchedulerException {
  6.  
    Scheduler scheduler = schedulerFactoryBean.getScheduler();
  7.  
    startJob1(scheduler);
  8.  
    startJob2(scheduler);
  9.  
    }
  10.  
    private void startJob1(Scheduler scheduler) throws SchedulerException{
  11.  
    JobDetail jobDetail = JobBuilder.newJob(ScheduledJob.class) .withIdentity("job1", "group1").build();
  12.  
    CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule("0/5 * * * * ?");
  13.  
    CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "group1") .withSchedule(scheduleBuilder).build();
  14.  
    scheduler.scheduleJob(jobDetail,cronTrigger);
  15.  
    }
  16.  
    private void startJob2(Scheduler scheduler) throws SchedulerException{
  17.  
    JobDetail jobDetail = JobBuilder.newJob(ScheduledJob2.class) .withIdentity("job2", "group1").build();
  18.  
    CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule("0/10 * * * * ?");
  19.  
    CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity("trigger2", "group1") .withSchedule(scheduleBuilder).build();
  20.  
    scheduler.scheduleJob(jobDetail,cronTrigger);
  21.  
    }
  22.  
    }
  23.  
     
  24.  
     

4.实现各个任务job

  1.  
    public class ScheduledJob implements Job{
  2.  
    private SimpleDateFormat dateFormat() {
  3.  
    return new SimpleDateFormat("HH:mm:ss");
  4.  
    }
  5.  
    @Override
  6.  
    public void execute(JobExecutionContext context) throws JobExecutionException {
  7.  
    System.out.println("AAAA: The time is now " + dateFormat().format(new Date()));
  8.  
    }
  9.  
    }
  10.  
     
  11.  
    这样会导致一个问题,就是执行定时器的时候 ,service不能注入 !
  12.  
     
  13.  
    解决方法: 通过外部来创建serivce ,然后在定时器里调用
  14.  
     
  15.  
     
创建ApplicationContextUtil工具类
/**
* 定时器service注入工具类
*/
@Component
public class ApplicationContextUtil implements ApplicationContextAware{ private static ApplicationContext applicationContext; public static ApplicationContext getApplicationContext() {
return applicationContext;
} public void setApplicationContext(ApplicationContext applicationContext) {
ApplicationContextUtil.applicationContext = applicationContext;
} public static Object getBean(String BeanName){
return applicationContext.getBean(BeanName);
}
} 2. 在定时器里调用工具类来创建service
   BankService bankService=(BankService) ApplicationContextUtil.getBean("BankService");
Double money=bankService.getBalance("62279205947481841"); 这样就完美的解决了service注入空指针异常的问题
转自:https://blog.csdn.net/dreamer_ax/article/details/72282392

SpringBoot集成Quartz实现定时器的更多相关文章

  1. SpringBoot集成Quartz实现定时任务

    1 需求 在我的前后端分离的实验室管理项目中,有一个功能是学生状态统计.我的设计是按天统计每种状态的比例.为了便于计算,在每天0点,系统需要将学生的状态重置,并插入一条数据作为一天的开始状态.另外,考 ...

  2. SpringBoot集成Quartz(解决@Autowired空指针Null问题即依赖注入的属性为null)

    使用spring-boot作为基础框架,其理念为零配置文件,所有的配置都是基于注解和暴露bean的方式. Quartz的4个核心概念: 1.Job表示一个工作,要执行的具体内容.此接口中只有一个方法v ...

  3. Springboot集成Quartz

    之前学习过spring的定时任务 :https://www.cnblogs.com/slimshady/p/10112515.html 本文主要学习记录下springboot使用quartz 1.   ...

  4. springBoot集成 quartz动态定时任务

    项目中需要用到定时任务,考虑了下java方面定时任务无非就三种: 用Java自带的timer类.稍微看了一下,可以实现大部分的指定频率的任务的调度(timer.schedule()),也可以实现关闭和 ...

  5. Spring Boot笔记(三) springboot 集成 Quartz 定时任务

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 1. 在 pom.xml 中 添加 Quartz 所需要 的 依赖 <!--定时器 quartz- ...

  6. springboot集成quartz定时任务课动态执行

    <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</ ...

  7. springboot集成quartz实现任务调度

    quartz 概述 特点 强大的调度功能 灵活的应用方式 分布式和集群能力 用到的设计模式 Builder 模式 factory模式 组件模式 链式写法 体系结构 调度器 任务 触发器 架构图 spr ...

  8. springboot自带定时任务和集成quartz

    1,springboot自带的定时任务  默认是单线程 有这个依赖就可以 <dependency> <groupId>org.springframework.boot</ ...

  9. SpringBoot整合Quartz定时任务(持久化到数据库)

    背景 最近在做项目,项目中有个需求:需要使用定时任务,这个定时任务需要即时生效.查看Quartz官网之后发现:Quartz提供两种基本作业存储类型: RAMJobStore :RAM也就是内存,默认情 ...

随机推荐

  1. shell初学之nginx(域名)

    创建两个以域名区分的虚拟网站: 1 #!/bin/bash 2 curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/ ...

  2. http keep-alive 的一些理解

    在日常的工作中涉及到了关于检测用户是否在线的功能需求,在方案设计过程中考虑过使用http-keepalive的方式,由于我们获取到的keepalive是经过nginx转发的keep-alive,所以最 ...

  3. Python数学建模-02.数据导入

    数据导入是所有数模编程的第一步,比你想象的更重要. 先要学会一种未必最佳,但是通用.安全.简单.好学的方法. 『Python 数学建模 @ Youcans』带你从数模小白成为国赛达人. 1. 数据导入 ...

  4. GO语言复合类型01---指针

    package main /* %T 类型占位符 %v 值占位符 %p 地址(指针)占位符,只有地址才能替换%p &value 对值取地址 *addr 对地址取值 **int 指向int型指针 ...

  5. TensorFlow文本情感分析实现

    TensorFlow文本情感分析实现 前面介绍了如何将卷积网络应用于图像.本文将把相似的想法应用于文本. 文本和图像有什么共同之处?乍一看很少.但是,如果将句子或文档表示为矩阵,则该矩阵与其中每个单元 ...

  6. YOLO、SSD、FPN、Mask-RCNN检测模型对比

    YOLO.SSD.FPN.Mask-RCNN检测模型对比 一.YOLO(you only look once) YOLO 属于回归系列的目标检测方法,与滑窗和后续区域划分的检测方法不同,他把检测任务当 ...

  7. JVM集合之开篇点题

    大家在平时的开发过程中是否遇到过StackOverflowError.OutOfMemoryError等类似的内存溢出错误呢?大家又是怎么解决这个问题的?再来,大家在面试过程中有没有被面试官提问过jv ...

  8. 最全JVM知识点思维导图,看这一篇就够了

    此处是转发别人的,别人花了二个月, 我花一天时间看完, 觉得很有用 https://www.processon.com/view/link/5eea141cf346fb1ae56a44e7

  9. 「题解」POI2005 AKC-Special Forces Manoeuvres

    本文将同步发布于: 洛谷博客: csdn: 博客园: 简书. 题目 题目链接:洛谷 P3428.官网. 题意简述 给定 \(n\) 个圆 \((x_i,y_i,r_i)\),每个圆对应一个点集 \(S ...

  10. 【NX二次开发】UF_OBJ_ask_display_properties获取对象所在层、获取对象颜色、获取对象是否隐藏、获取对象是否高亮,获取对象线宽、字体大小

    UF_OBJ_ask_display_properties 返回一个对象的显示属性(层.颜色.隐藏状态.线宽和字体). UF_OBJ_disp_props_p_t结构体: layer int 对象所在 ...