SpringBoot+Quartz定时框架(Demo)

版权声明:标明出处自由转载 https://blog.csdn.net/qq_36226997/article/details/91451377

1.引入pom依赖

<!-- Quartz坐标 -->
<dependency>
    <groupId>org.quartz-scheduler</groupId>
    <artifactId>quartz</artifactId>
    <version>2.2.1</version>
</dependency>
<!-- Scheduled坐标 -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context-support</artifactId>
</dependency>
<!-- spring-tx坐标 -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-tx</artifactId>
</dependency>

2.创建job类

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

import java.util.Date;

/**
 * 定时任务类
 */
public class QuartzDemo implements Job {
    /**
     * 任务被触发时所执行的方法
     * @param context
     * @throws JobExecutionException
     */
    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
        System.out.println("QuartzDemo.execute"+new Date());
    }
}

3.创建Quartz的配置类

3.1 普通时间格式

import com.example.demo.quartz.QuartzDemo;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.quartz.JobDetailFactoryBean;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;
import org.springframework.scheduling.quartz.SimpleTriggerFactoryBean;

/**
 * Quartz的配置类
 */
@Configuration
public class QuartzConfig {
    //1.创建job对象
    @Bean
    public JobDetailFactoryBean jobDetailFactoryBean() {
        JobDetailFactoryBean factoryBean = new JobDetailFactoryBean();
        //关联Job类
        factoryBean.setJobClass(QuartzDemo.class);
        return factoryBean;
    }
    //2.创建Trigger对象(简单的)
    @Bean
    public SimpleTriggerFactoryBean simpleTriggerFactoryBean(JobDetailFactoryBean jobDetailFactoryBean) {
        SimpleTriggerFactoryBean factoryBean = new SimpleTriggerFactoryBean();
        //关联JobDetail对象
        factoryBean.setJobDetail(jobDetailFactoryBean.getObject());
        //参数表示一个执行的毫秒数
        factoryBean.setRepeatInterval(2000);
        //设置重复次数
        factoryBean.setRepeatCount(5);
        return factoryBean;
    }
    //3.创建Scheduled对象
    @Bean
    public SchedulerFactoryBean schedulerFactoryBean(SimpleTriggerFactoryBean simpleTriggerFactoryBean) {
        SchedulerFactoryBean factoryBean = new SchedulerFactoryBean();
        //关联Trigger
        factoryBean.setTriggers(simpleTriggerFactoryBean.getObject());
        return factoryBean;
    }
}

3.2 Cron时间格式

import com.example.demo.quartz.QuartzDemo;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.quartz.CronTriggerFactoryBean;
import org.springframework.scheduling.quartz.JobDetailFactoryBean;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;

/**
 * Quartz的配置类
 */
@Configuration
public class QuartzConfig {
    //1.创建job对象
    @Bean
    public JobDetailFactoryBean jobDetailFactoryBean() {
        JobDetailFactoryBean factoryBean = new JobDetailFactoryBean();
        //关联Job类
        factoryBean.setJobClass(QuartzDemo.class);
        return factoryBean;
    }
    //2.Cron Trigger
    @Bean
    public CronTriggerFactoryBean cronTriggerFactoryBean(JobDetailFactoryBean jobDetailFactoryBean) {
        CronTriggerFactoryBean factoryBean = new CronTriggerFactoryBean();
        //关联JobDetail对象
        factoryBean.setJobDetail(jobDetailFactoryBean.getObject());
        //设置触发时间
        factoryBean.setCronExpression("0/2 * * * * ?");
        return factoryBean;
    }
    //3.创建Scheduled对象
    @Bean
    public SchedulerFactoryBean schedulerFactoryBean(CronTriggerFactoryBean cronTriggerFactoryBean) {
        SchedulerFactoryBean factoryBean = new SchedulerFactoryBean();
        //关联Trigger
        factoryBean.setTriggers(cronTriggerFactoryBean.getObject());
        return factoryBean;
    }
}

4.测试代码

启动类添加@EnableScheduling注解

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

控制台输出

QuartzDemo.executeTue Jun 11 17:33:53 CST 2019
QuartzDemo.executeTue Jun 11 17:33:53 CST 2019
QuartzDemo.executeTue Jun 11 17:33:55 CST 2019
QuartzDemo.executeTue Jun 11 17:33:57 CST 2019
QuartzDemo.executeTue Jun 11 17:33:59 CST 2019

猜你喜欢

转载自blog.csdn.net/qq_36226997/article/details/91451377