Java 根据cron表达式,获取quartz job执行时间

1.借助quartz中的工具类TriggerUtils,获取当前和下一次触发时间.
TriggerUtils.computeFireTimesBetween(cronTriggerImpl, null, fromDate ,toDate)

2.测试code(前提: 需要导入quartz依赖)

package boot.spring.quartz;

import org.quartz.TriggerUtils;
import org.quartz.impl.triggers.CronTriggerImpl;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.util.Date;
import java.util.List;

public class CronUtils {
    
    public static void main(String[] args) throws ParseException {

        CronTriggerImpl cronTriggerImpl = new CronTriggerImpl();
        cronTriggerImpl.setCronExpression("0 0/30 * * * ?");// 30分钟执行一次

        OffsetDateTime odt = OffsetDateTime.now();
        ZoneOffset zoneOffset = odt.getOffset();
        LocalDateTime now = LocalDateTime.now();
        // 当前触发的时间
        LocalDateTime lastTime = now.minusMinutes(30);
        LocalDateTime nextTime = now.plusMinutes(30);
        Date lastDate = Date.from(lastTime.toInstant(ZoneOffset.of(zoneOffset.toString())));
        Date nextDate = Date.from(nextTime.toInstant(ZoneOffset.of(zoneOffset.toString())));
        //
        List lastAndNextTimes = TriggerUtils.computeFireTimesBetween(cronTriggerImpl, null, lastDate ,nextDate);
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        lastAndNextTimes.forEach(date -> {
            System.out.println(dateFormat.format(date));
        });
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
获取QuartzJobBean子类的cron表达式,可以通过以下步骤: 1. 在子类中添加一个成员变量,用于存储cron表达式,例如: ```java private String cronExpression; ``` 2. 在子类中添加一个setter方法,用于设置cron表达式: ```java public void setCronExpression(String cronExpression) { this.cronExpression = cronExpression; } ``` 3. 在子类中重写QuartzJobBean的executeInternal方法,在这个方法中可以使用成员变量cronExpression获取cron表达式: ```java @Override protected void executeInternal(JobExecutionContext context) throws JobExecutionException { // 获取当前时间 Date now = new Date(); // 根据cron表达式计算下一次触发时间 CronTrigger trigger = TriggerBuilder.newTrigger() .withIdentity("trigger", "group") .withSchedule(CronScheduleBuilder.cronSchedule(cronExpression)) .build(); Date nextFireTime = trigger.getFireTimeAfter(now); // 输出下一次触发时间 System.out.println("Next fire time: " + nextFireTime); } ``` 4. 在调用子类的setter方法设置cron表达式后,可以使用Quartz的Scheduler来启动任务: ```java // 创建一个JobDetail实例,指定子类为Job实现类 JobDetail jobDetail = JobBuilder.newJob(MyJob.class).build(); // 创建一个Trigger实例,指定cron表达式 Trigger trigger = TriggerBuilder.newTrigger() .withIdentity("trigger", "group") .withSchedule(CronScheduleBuilder.cronSchedule(myJob.getCronExpression())) .build(); // 启动任务调度器 SchedulerFactory schedulerFactory = new StdSchedulerFactory(); Scheduler scheduler = schedulerFactory.getScheduler(); scheduler.start(); // 将JobDetail和Trigger注册到任务调度器中 scheduler.scheduleJob(jobDetail, trigger); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值