【Spring Boot中使用Quartz框架实现在到期的前一天完成提醒的Java示例代码】


一、Spring Boot中使用Quartz框架实现在到期的前一天完成提醒的Java示例代码

二、使用步骤

1.首先,在pom.xml文件中添加Quartz和Spring Boot的依赖:

<dependency>
    <groupId>org.quartz-scheduler</groupId>
    <artifactId>quartz</artifactId>
    <version>2.3.2</version>
</dependency>

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

2.然后,创建一个继承于QuartzJobBean的任务类,并实现executeInternal方法:

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;

public class ReminderJob extends QuartzJobBean {
    
    
    
    @Override
    protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
    
    
        // 获取任务参数,例如任务到期时间
        Date dueDate = (Date) context.getJobDetail().getJobDataMap().get("dueDate");
        
        // 计算到期前一天的日期
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(dueDate);
        calendar.add(Calendar.DAY_OF_MONTH, -1);
        Date reminderDate = calendar.getTime();
        
        // 获取当前日期
        Date currentDate = new Date();
        
        // 判断是否到达提醒日期
        if (currentDate.after(reminderDate)) {
    
    
            // 执行提醒操作,例如发送邮件或推送通知等
            System.out.println("Reminder: Your task is due tomorrow!");
        }
    }
}


3、最后,在Spring Boot的配置文件中添加Quartz的相关配置:

spring:
  quartz:
    job-store-type: memory
    properties:
      org:
        quartz:
          scheduler:
            instanceName: MyScheduler
            instanceId: AUTO
          jobStore:
            class: org.quartz.simpl.RAMJobStore
          threadPool:
            class: org.quartz.simpl.SimpleThreadPool
            threadCount: 5
            threadPriority: 5

这个配置文件中,我们指定了Quartz使用内存作为任务存储方式,同时配置了线程池的大小和优先级。

接下来,在Spring Boot的启动类中添加一个SchedulerFactoryBean实例,并设置任务和触发器:

import java.util.Date;
import org.quartz.JobDetail;
import org.quartz.SimpleTrigger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.scheduling.quartz.JobDetailFactoryBean;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;
import org.springframework.scheduling.quartz.SimpleTriggerFactoryBean;

@SpringBootApplication
public class Application {
    
    
    
    @Autowired
    private JobDetailFactoryBean jobDetailFactoryBean;
    
    @Autowired
    private SimpleTriggerFactoryBean simpleTriggerFactoryBean;
    
    public static void main(String[] args) {
    
    
        SpringApplication.run(Application.class, args);
    }
    
    @Bean
    public JobDetailFactoryBean jobDetailFactoryBean() {
    
    
        JobDetailFactoryBean jobDetailFactoryBean = new JobDetailFactoryBean();
        jobDetailFactoryBean.setJobClass(ReminderJob.class);
        jobDetailFactoryBean.setDurability(true);
        jobDetailFactoryBean.setJobDataMap(new JobDataMap() {
    
    {
    
    
            put("dueDate", new Date()); // 设置任务参数,例如任务到期时间
        }});
        return jobDetailFactoryBean;
    }
    
    @Bean
    public SimpleTriggerFactoryBean simpleTriggerFactoryBean() {
    
    
        SimpleTriggerFactoryBean simpleTriggerFactoryBean = new SimpleTriggerFactoryBean();
        simpleTriggerFactoryBean.setJobDetail(jobDetailFactoryBean.getObject());
        simpleTriggerFactoryBean.setRepeatInterval(24 * 60 * 60 * 1000); // 每天执行一次
        simpleTriggerFactoryBean.setStartTime(new Date());
        return simpleTriggerFactoryBean;
    }
    
    @Bean
    public SchedulerFactoryBean schedulerFactoryBean() {
    
    
        SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
        schedulerFactoryBean.setJobDetails(new JobDetail[] {
    
    jobDetailFactoryBean.getObject()});
        schedulerFactoryBean.setTriggers(new Trigger[] {
    
    simpleTriggerFactoryBean.getObject()});
        return schedulerFactoryBean;
    }
}

在这个启动类中,我们使用了@Autowired注解将JobDetailFactoryBean和SimpleTriggerFactoryBean注入进来,并在schedulerFactoryBean方法中将它们设置为Scheduler的任务和触发器。

这样,当我们启动Spring Boot应用时,Quartz就会自动启动,并按照我们的配置执行定时任务。

猜你喜欢

转载自blog.csdn.net/m0_48114733/article/details/131580806