springboot使用quartz

Jacky Java 2022-12-01 11

pom.xml

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

java

package com.quartz;


import lombok.extern.slf4j.Slf4j;
import org.quartz.*;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.scheduling.quartz.QuartzJobBean;

import java.time.LocalDateTime;

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

    @Bean
    public JobDetail jobDetail() {
        log.info("create jobDetail");
        return JobBuilder.newJob(JobDemo.class)
                .withIdentity("任务名称")
                //即使没有Trigger关联时,也不需要删除该JobDetail
                .storeDurably()
                .usingJobData("传入参数key", "传入参数值")
                .build();
    }


    @Bean
    public Trigger trigger(JobDetail jobDetail) {
        log.info("create trigger");
        return TriggerBuilder.newTrigger()
                .forJob(jobDetail)
                .withIdentity("定时器名称")
                // 每秒执行一次
                .withSchedule(CronScheduleBuilder.cronSchedule("0/1 * * * * ?"))
                .build();
    }

    public static class JobDemo extends QuartzJobBean {
        @Override
        protected void executeInternal(JobExecutionContext context) {
            log.info("定时任务 {}", LocalDateTime.now());
            context.getJobDetail().getJobDataMap().forEach((s, o) -> {
                log.info("定时任务 {}:{}", s, o);
            });

        }
    }
}