栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring Boot 整合 Quartz 定时框架(可以单个或多个任务操作)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring Boot 整合 Quartz 定时框架(可以单个或多个任务操作)

Quartz 的使用思路

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

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

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

1.创建springboot项目,修改 pom 文件添加三个坐标



    4.0.0
    
        org.springframework.boot
        spring-boot-starter-parent
        2.6.2
         
    
    com.xmx
    scheduleddemo
    0.0.1-SNAPSHOT
    war
    scheduleddemo
    Demo project for Spring Boot
    
        1.8
    
    
        
            org.springframework.boot
            spring-boot-starter-thymeleaf
        
        
            org.springframework.boot
            spring-boot-starter-web
        
        
        
            org.springframework
            spring-context-support
        
        
        org.quartz-scheduler
        quartz
        2.2.1
    
        
        
            org.springframework
            spring-tx
        


        
            org.springframework.boot
            spring-boot-starter-tomcat
            provided
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    


2.编写定时任务类

package com.xmx.scheduleddemo;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class QuartzDemo implements Job {
    //重写Job父类的方法,定时要执行的任务代码写在此方法中。
    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        //定时任务,并输出加载的信息
        System.out.println("定时器被触发"+sdf.format(new Date())+
                context.getMergedJobDataMap().getString("msg"));
    }
}

3.编写工作计划类

package com.xmx.scheduleddemo;
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;
import org.springframework.scheduling.quartz.SimpleTriggerFactoryBean;

import java.util.Objects;


@Configuration
public class QuartzConfig {
    
    @Bean
    public JobDetailFactoryBean jobDetailFactoryBean() {
        // 关联我们自己的 Job 类
        JobDetailFactoryBean factory = new JobDetailFactoryBean();
        factory.setJobClass(QuartzDemo.class);
        // 可以添加一些信息,在Job类中可以取
        factory.getJobDataMap().put("msg", "湖南新梦想");
        return factory;
    }

    
    @Bean
    public SimpleTriggerFactoryBean simpleTriggerFactoryBean(JobDetailFactoryBean jobDetailFactoryBean) {
        SimpleTriggerFactoryBean factory = new SimpleTriggerFactoryBean();
        // 关联JobDetail 对象
        factory.setJobDetail(jobDetailFactoryBean.getObject());
        // 该参数表示一个执行的毫秒数
        factory.setRepeatInterval(2000);
        // 重复次数
        factory.setRepeatCount(5);
        return factory;
    }

    
    @Bean
    public CronTriggerFactoryBean cronTriggerFactoryBean(JobDetailFactoryBean jobDetailFactoryBean) {
        CronTriggerFactoryBean factory = new CronTriggerFactoryBean();
        factory.setJobDetail(Objects.requireNonNull(jobDetailFactoryBean.getObject()));
        // 设置触发时间
        factory.setCronexpression("0/6 * * * * ?");
        return factory;
    }
    
    @Bean
    public SchedulerFactoryBean schedulerFactoryBean(CronTriggerFactoryBean trigger) {
        SchedulerFactoryBean factory = new SchedulerFactoryBean();
        factory.setStartupDelay(1);
     // 关联 trigger
        factory.setTriggers(trigger.getObject());
        return factory;
    }
}

4.运行结果(每隔6秒执行 )

5.另一种方式配置

@Bean
public JobDetail printTimeJobDetail() {
	return JobBuilder.newJob(QuartzDemo.class)// PrintTimeJob我们的业务类
		.withIdentity("QuartzDemo")// 可以给该JobDetail起一个id
		// 每个JobDetail内都有一个Map,包含了关联到这个Job的数据,在Job类中可以通过context获取
		.usingJobData("msg", "Hello Quartz")// 关联键值对
		.storeDurably() // 即使没有Trigger关联时,也不需要删除该JobDetail
		.build();
}
@Bean
public Trigger printTimeJobTrigger() {
	CronScheduleBuilder cronScheduleBuilder =  //
		CronScheduleBuilder.cronSchedule("0/5 * * * * ?");
	return TriggerBuilder.newTrigger().  //
		forJob(printTimeJobDetail())
		// 关联上述的JobDetail //
		.withIdentity("quartzTaskService")  // 给Trigger起个名字
		.withSchedule(cronScheduleBuilder)  //
		.build();
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/678164.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号