springboot实现quartz定时任务

1.添加依赖

在这里插入图片描述

				<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-quartz</artifactId>
        </dependency>

2.创建定时任务

在这里插入图片描述


package com.yangjunbo.JPADemo.scheduled;

import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.quartz.QuartzJobBean;

public class SampleJob extends QuartzJobBean {
    private static final Logger logger = LoggerFactory.getLogger(SchedulerTask.class);

    private String name;
    public void setName(String name) {
        this.name = name;
    }
    @Override
    protected void executeInternal(JobExecutionContext context)
            throws JobExecutionException {
        logger.info(String.format("Hello %s!", this.name));
    }
}

3. 构建JobDetail、CronTrigger

在这里插入图片描述

package com.yangjunbo.JPADemo.config;

import com.yangjunbo.JPADemo.scheduled.SampleJob;
import org.quartz.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class SampleScheduler {
    @Bean
    public JobDetail sampleJobDetail() {
        return JobBuilder.newJob(SampleJob.class).withIdentity("sampleJob")
                .usingJobData("name", "weiz test1")
                .storeDurably()
                .build();
    }

    @Bean
    public Trigger sampleJobTrigger() {
        SimpleScheduleBuilder scheduleBuilder = SimpleScheduleBuilder.simpleSchedule()
                .withIntervalInSeconds(10).repeatForever();
        return TriggerBuilder
                .newTrigger()
                .forJob(sampleJobDetail())
                .withIdentity("sampleTrigger")
                .withSchedule(scheduleBuilder).build();
    }
}

在上面的示例中,定义的SampleScheduler调度器类包含JobDetail和Trigger两个对象,分别用于控制任务启动时的参数传入和任务触发规则。示例参数说明如下:
1)JobBuilder类构造函数只能通过JobBuilder的静态方法newJob(Class<? extends Job> jobClass)生成JobDetail实例。2)usingJobData()方法动态传入Job任务中的参数,这里传入SampleJob任务类中的name参数。
3)withIdentity()方法可以传入String name和String group两个参数来定义TriggerKey。当然,也可以不设置参数,Quartz会自动生成一个独一无二的TriggerKey来区分不同的触发器。
4)withIntervalInSeconds()方法中的任务触发规则包含withIntervalInXXX等多种时间设置。示例代码中定义了每10秒执行一次任务。

4.运行测试

在这里插入图片描述参考书籍:《springboot从入门到实战-章为忠著》

5.cron表达式

如果需要定义更复杂的应用场景可以使用CronSchedule,它可以设置更灵活的使用方式

6.创建CronJob

在这里插入图片描述

package com.yangjunbo.JPADemo.scheduled;

import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.quartz.QuartzJobBean;

public class CronJob extends QuartzJobBean {
    private static final Logger logger = LoggerFactory.getLogger(SchedulerTask.class);

    private String name;
    public void setName(String name) {
        this.name = name;
    }

    @Override
    protected void executeInternal(JobExecutionContext context)
            throws JobExecutionException {
        logger.info(String.format("Hello %s!", this.name));
    }
}

7.创建CronScheduler,构建jobdetail、crontrigger

package com.yangjunbo.JPADemo.config;

import com.yangjunbo.JPADemo.scheduled.CronJob;
import org.quartz.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class CronScheduler {
    @Bean
    public JobDetail cronJobDetail(){
        return JobBuilder.newJob(CronJob.class)
                .withIdentity("cronJob")
                .usingJobData("name","weiz cronJob")
                .storeDurably()
                .build();
    }

    @Bean
    public Trigger cronJobTrigger(){
        CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule("0/10 * * * * ?");
        return TriggerBuilder.newTrigger()
                .withIdentity("CronSchedule")
                .forJob(cronJobDetail())
                .withSchedule(scheduleBuilder)
                .build();
    }
}

在这里插入图片描述
8.运行测试
在这里插入图片描述参考书籍:《springboot从入门到实战-章为忠著》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值