定时任务组件Quartz

官网:Quartz Enterprise Job Scheduler

1、Quartz框架的使用思路

1)job - 任务 - 你要做什么事?

2)Trigger - 触发器 - 你什么时候去做?

3)Scheduler - 任务调度 - 你什么时候需要去做什么事?

2、pringBoot整合Quartz框架

添加Quartz依赖:

  
            org.springframework.boot
            spring-boot-starter-web
        

        
            org.springframework.boot
            spring-boot-starter-quartz
        

自定义一个Job(任务类):

package com.yy.job;

import org.quartz.JobExecutionException;
import org.springframework.stereotype.Component;

import java.util.Date;

@Component
public class quartzDame {
    public void printTime() throws JobExecutionException {
        System.out.println("现在时刻:"+new Date());
    }
}

编写quartz配置类:

package com.yy.config;

import com.yy.job.quartzDame;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.quartz.CronTriggerFactoryBean;
import org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;

@Configuration
public class quartzConfig {

        @Bean//job:干什么事
        public MethodInvokingJobDetailFactoryBean methodInvokingJobDetailFactoryBean(
                quartzDame quartzDemo){
            MethodInvokingJobDetailFactoryBean JobDetailFactoryBean = new
                    MethodInvokingJobDetailFactoryBean();
            JobDetailFactoryBean.setTargetObject(quartzDemo);
            JobDetailFactoryBean.setTargetMethod("printTime");
            return JobDetailFactoryBean;
        }

        @Bean//trigger:什么时候
        public CronTriggerFactoryBean cronTriggerFactoryBean(
                MethodInvokingJobDetailFactoryBean JobDetailFactoryBean){
            CronTriggerFactoryBean triggerFactoryBean = new CronTriggerFactoryBean();
            triggerFactoryBean.setCronExpression("0/1 * * * * ?");
            triggerFactoryBean.setJobDetail(JobDetailFactoryBean.getObject());
            return triggerFactoryBean;
        }

        @Bean//scheduler:什么时候干什么事
        public SchedulerFactoryBean schedulerFactoryBean(
                CronTriggerFactoryBean triggerFactoryBean){
            SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
            schedulerFactoryBean.setTriggers(triggerFactoryBean.getObject());
            return schedulerFactoryBean;
        }
    }

 编写启动器类:

package com.yy;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class IcanJobApp {
    public static void main(String[] args) {
        SpringApplication.run(IcanJobApp.class,args);
    }
}

 查看控制台:

定时任务组件Quartz_第1张图片

3、Corn表达式 

Quartz框架中使用Trigger - 触发器时使用Corn表达式表达特定时间

Cron 表达式是一个字符串,分为 6 或 7 个域,每一个域代表一个含义

Cron 有如下两种语法格式:

(1)Seconds Minutes Hours Day Month Week Year

(2)Seconds Minutes Hours Day Month Week

corn 从左到右(用空格隔开):秒 分 小时 月份中的日期 月份 星期中的日期 年份 

Day(天)和 Week(周)冲突,使用时另外一个使用“?”

定时任务组件Quartz_第2张图片

定时任务组件Quartz_第3张图片 定时任务组件Quartz_第4张图片

?

“?”字符只在日期域和星期域中使用。它被用来指定“非明确的值”。

例如:

想在每月的20日触发调度0 0 0 20 * ?,而且只能使用如下写法:0/1 0 0 20 * ?。其中最后一位只能用?,而不能使 用*,因为*表示不管星期几都会触发恰好与20冲突。

 定时任务组件Quartz_第5张图片

 cron表达式在线生成器:在线Cron表达式生成器

 

你可能感兴趣的:(java,前端,spring)