cron 表达式 1小时30分钟,100分钟执行一次

本文详细介绍了如何使用Quartz框架配置复杂的定时任务,包括如何通过组合多个Cron表达式实现每隔特定时间(如每隔90分钟、100分钟或2个半小时)执行一次的任务。同时,提供了SimpleTrigger的使用示例,展示了如何设置任务在具体时间点执行并以指定间隔重复执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注:不涉及日历(不指定某月\天(周几)等),使用:Simple Trigger(测试代码粘贴在最后)

比如定时任务的需求:间隔 多少秒/分/时( 每隔99秒,每隔100分钟执行等)

 

每隔90分钟执行一次 
    90*2= 180 = 3个小时
   需要添加2个cron,间隔3小时

表达式:
cron1 0 30 1/3 * * ?   (1.30,4.30,7.30,,,,)
cron2 0 0  0/3 * * ?   (3.00,6.00,9.00,,,,)

每隔100分钟

    100*3= 300 = 5个小时 
    需要添加3个cron,间隔5小时;

cron1 0 40 1/5 * * ?   (1.40,6.40,11.40,,,)
cron2 0 20 3/5 * * ?   (3.20,8.20,13.20,,,,)
cron2 0 0  5/5 * * ?   (5.00,10.00,15.00)

每隔2个半小时执行一次 
    150*2= 300 = 5个小时
   需要添加2个cron,间隔5小时

表达式:
cron1 0 30 2/5 * * ?   (2.30,7.30,12.30,,,,)
cron2 0 0  0/5 * * ?   (5.00,10.00,15.00,,,,)

 

受其他博文启发,一个定时任务实现不了,那这个任务,就添加多个触发时间,来实现;

需求1:从0点开始,每隔2个半小时,执行一次
思路记录:
 1.先列出,我们预期的执行时间:

       2.30,5.00,7.30,10.00,12.30,15:00

2.找规律:我们知道间隔 整数(1,2,3,,,)个小时的cron表达式;根据此前提,找间隔 整数个小时 时间的规律

3.规律结果

(2.30,7.30,12.30,,,,)       两点半开始,间隔5小时    那么此表达式==>0 30 2/5 * * ?

(5.00,10.00,15.00,,,,)      0点开始,间隔5小时        那么此表达式==> 0  0/5 * * ?

需求2:在指定时间t后,启动定时任务a,

      可以采用:.再添加一个执行定时任务,动态添加那要求任务a,在那指定的时间t开始执行一次,有且只调用一次

总结:间隔 n 个小时,执行一次

              1.找出n和60的最小公倍数:gbs;

              2.gbs除60=间隔时间tt       (tt<23?)

             3.gbs除n=cron表达式个数

附加表达式在线测试网站:  http://cron.qqe2.com/ 

注意:粘贴我们自己写的表达cron表达式,查看运行结果时,得核对一下表达式是否被修改;我就遇到  0/3 变===>0-3

 

Simple Trigger:在具体的时间点执行一次,或者在具体的时间点执行,并且以指定的间隔重复执行若干次

package com.yqy.quartz;


import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.TimeUnit;

import org.quartz.Job;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;

public class SimpleJobTest implements Job{
	
    public static void main(String[] args) throws SchedulerException, InterruptedException {
        // 1、创建调度器Scheduler
        SchedulerFactory schedulerFactory = new StdSchedulerFactory();
        Scheduler scheduler = schedulerFactory.getScheduler();
        // 2、创建JobDetail实例,并与需要执行的job类绑定(Job执行内容),测试:所以我直接写在了本类
        JobDetail jobDetail = JobBuilder.newJob(SimpleJobTest.class)
                                        .withIdentity("job1", "group1").build();
        // 3、构建Trigger实例,每隔100s执行一次
        Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "triggerGroup1")
                .startNow()//立即生效
                .withSchedule(SimpleScheduleBuilder.simpleSchedule()
                .withIntervalInSeconds(100)//每隔100s执行一次
//                .withIntervalInMinutes(100)//每隔100分钟执行一次
                .repeatForever()).build();//一直执行

        //4、执行
        scheduler.scheduleJob(jobDetail, trigger);
        System.out.println("--------scheduler start ! ------------");
        scheduler.start();
        //睡眠
//        TimeUnit.MINUTES.sleep(1);//睡眠1分钟
//        scheduler.shutdown();
//        System.out.println("--------scheduler shutdown ! ------------");
    }
    //执行某任务
     @Override
     public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
         String printTime = new SimpleDateFormat("yy-MM-dd HH:mm:ss").format(new Date());
         System.out.println("任务执行时间:"+printTime);
     }
}
//更多SimpleTrigger使用请查看:  https://www.w3cschool.cn/quartz_doc/quartz_doc-67a52d1f.html

 

### 设置每70分钟执行一次Cron表达式 Cron表达式的标准格式由六个或七个字段构成,用于描述详细的调度计划[^4]。然而,传统的Cron表达式并不直接支持以非整小时倍数(如70分钟)作为时间间隔的任务调度。这是因为Cron表达式的设计初衷是基于固定的日历单位(、分、时等)。因此,要实现每70分钟执行一次的任务,需要采取一些变通的方法。 #### 方法一:利用分钟字段与小时字段配合 一种常见的解决方式是通过组合分钟小时字段来模拟70分钟时间间隔。例如,可以设定任务在某些特定的时间点触发,这些时间点恰好相隔70分钟。下面是一个可行的例子: ```plaintext 0 0,10,20,30,40,50 * * * ? ``` 这个表达式的含义是从每一小时的第0分钟开始,随后每隔10分钟再触发一次,直到该小时内所有的预设分钟都被覆盖完毕。但是需要注意的是,这种方法实际上是以60分钟为周期循环,并不符合严格的70分钟间隔要求[^2]。 为了更接近真实的70分钟间隔,还可以进一步细化到具体的几个离散时间点上。比如从某个基准时间出发,依次列举出所有符合条件的实际触发时刻。 #### 方法二:手动枚举具体触发时间 当无法单纯依靠单一Cron表达式达到理想效果时,另一种替代方案便是显式地罗列每一天里期望触发的确切时间列表。这种方式虽然显得繁琐,却能够确保绝对精准地按照预期频率运行任务。 假定今天早晨8:00首次启动任务,则接下来几次触发应发生在: - 上午9:50, - 中午11:40, - 下午1:30…… 依此类推直至次日凌晨前最后完成一轮操作为止。相应地,完整的Cron字符串会非常复杂且不易维护更新。 #### Java代码实例演示 假如是在Java项目中借助Spring框架实施这样的定时逻辑,那么可以直接编写如下所示的服务组件类: ```java import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @Component public class MyScheduler { @Scheduled(cron = "0 0/10 * * * ?") // 每十分钟触发一次 public void performTask() { System.out.println("Performing scheduled task..."); } } ``` 尽管这里的例子仅实现了每十分钟后调用函数的功能,但可以根据实际情况修改参数值或者叠加额外控制层面上去逼近所需的七十分钟跨度目标。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值