• Spring Boot 定时任务 Quartz 使用教程


    Quartz是一个完全由java编写的开源作业调度框架,他使用非常简单。本章主要讲解 Quartz在Spring Boot 中的使用。

    1. 快速集成 Quartz
    2. 介绍 Quartz 几个主要技术点
    3. Quartz 在 Spring Boot 的配置
    4. Quartz 在 Spring Boot 中整合 Mybatis

    本着一篇文章一个示例的原则,2、3、4 将在下一章节说明

    本项目源码下载

    1 新建 Spring Boot Maven 示例工程项目

    注意:是用来 IDEA 开发工具

    1. File > New > Project,如下图选择 Spring Initializr 然后点击 【Next】下一步
    2. 填写 GroupId(包名)、Artifact(项目名) 即可。点击 下一步
      groupId=com.fishpro
      artifactId=quartz
    3. 选择依赖 Spring Web Starter 前面打钩。
    4. 项目名设置为 spring-boot-study-quartz.

    2 依赖引入 Pom

    <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-quartz</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
    

    3 使用 Quartz

    3.1 在启动文件中编写一个简单的使用

    QuartzApplication 中直接编写一启动关闭类代码

    @SpringBootApplication
    public class QuartzApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(QuartzApplication.class, args);
            try {
                // Grab the Scheduler instance from the Factory
                Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
    
                //启动
                scheduler.start();
                //关闭
                scheduler.shutdown();
    
            } catch (SchedulerException se) {
                se.printStackTrace();
            }
        }
    }
    

    运行在控制台观察结果

    2019-08-08 15:09:01.313  INFO 21565 --- [           main] org.quartz.impl.StdSchedulerFactory      : Quartz scheduler 'DefaultQuartzScheduler' initialized from default resource file in Quartz package: 'quartz.properties'
    2019-08-08 15:09:01.313  INFO 21565 --- [           main] org.quartz.impl.StdSchedulerFactory      : Quartz scheduler version: 2.3.1
    2019-08-08 15:09:01.314  INFO 21565 --- [           main] org.quartz.core.QuartzScheduler          : Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED started.
    2019-08-08 15:09:01.314  INFO 21565 --- [           main] org.quartz.core.QuartzScheduler          : Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED shutting down.
    2019-08-08 15:09:01.314  INFO 21565 --- [           main] org.quartz.core.QuartzScheduler          : Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED paused.
    2019-08-08 15:09:01.314  INFO 21565 --- [           main] org.quartz.core.QuartzScheduler          : Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED shutdown complete.
    

    3.2 使用 Job 和 Trigger

    1. 新建一个 Job 类 WelcomeJob
    2. 在启动类中调用他
      WelcomeJob (路径 src/main/java/com/fishpro/quartz/job/WelcomeJob.java)
    public class WelcomeJob implements Job {
    
        @Override
        public void execute(JobExecutionContext arg0) throws JobExecutionException {
           System.out.println("这是一个quartz 任务");
        }
    }
    

    QuartzApplication (路径 src/main/java/com/fishpro/quartz/QuartzApplication.java)

    @SpringBootApplication
    public class QuartzApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(QuartzApplication.class, args);
            try {
                // Grab the Scheduler instance from the Factory
                Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
    
                //启动
                scheduler.start();
                //新建一个 Job WelcomeJob
                JobDetail job = JobBuilder.newJob(WelcomeJob.class)
                        .withIdentity("mySimpleJob", "simpleGroup")
                        .build();
    
                // 触发器 定义多长时间触发 JobDetail
                Trigger trigger = org.quartz.TriggerBuilder.newTrigger()
                        .withIdentity("simpleTrigger", "simpleGroup")
                        .startNow()
                        .withSchedule(simpleSchedule()
                                .withIntervalInSeconds(10)
                                .repeatForever())
                        .build();
                scheduler.scheduleJob(job,trigger);
                //关闭
                //scheduler.shutdown();
    
            } catch (SchedulerException se) {
                se.printStackTrace();
            }
        }
    }
    

    运行结果

    2019-08-08 16:46:36.599  INFO 21695 --- [           main] org.quartz.impl.StdSchedulerFactory      : Quartz scheduler 'DefaultQuartzScheduler' initialized from default resource file in Quartz package: 'quartz.properties'
    2019-08-08 16:46:36.599  INFO 21695 --- [           main] org.quartz.impl.StdSchedulerFactory      : Quartz scheduler version: 2.3.1
    2019-08-08 16:46:36.599  INFO 21695 --- [           main] org.quartz.core.QuartzScheduler          : Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED started.
    这是一个quartz 任务
    这是一个quartz 任务
    这是一个quartz 任务
    这是一个quartz 任务
    这是一个quartz 任务
    这是一个quartz 任务
    这是一个quartz 任务
    这是一个quartz 任务
    这是一个quartz 任务
    

    本项目源码下载

    如果您觉得本系列示例对您有帮助,请点击右上角按钮 watch 以示支持谢谢


    参考

    http://www.quartz-scheduler.org/documentation/

  • 相关阅读:
    ASP.NET Core真实管道详解[2]:Server是如何完成针对请求的监听、接收与响应的【上】
    ASP.NET Core真实管道详解[1]:中间件是个什么东西?
    .NET Core下的日志(3):如何将日志消息输出到控制台上
    “前.NET Core时代”如何实现跨平台代码重用 ——程序集重用
    “前.NET Core时代”如何实现跨平台代码重用 ——源文件重用
    .NET Core下的日志(2):日志模型详解
    .NET Core下的日志(1):记录日志信息
    ASP.NET Core 1.0中实现文件上传的两种方式(提交表单和采用AJAX)
    ASP.NET Core管道深度剖析[共4篇]
    ASP.NET Core管道深度剖析(4):管道是如何建立起来的?
  • 原文地址:https://www.cnblogs.com/fishpro/p/spring-boot-study-quartz.html
Copyright © 2020-2023  润新知