定时任务工具类(Cron Util)

文章链接

定时任务工具类(Cron Util)

依赖

cron-utils的github地址:https://github.com/jmrozanec/cron-utils

<dependency>
    <groupId>com.cronutils</groupId>
    <artifactId>cron-utils</artifactId>
    <version>9.2.1</version>
</dependency>

基本使用

定义cron表达式的支持范围

// 创建cron定义,自定义cron表达式支持的范围
CronDefinition cronDefinition =
    CronDefinitionBuilder.defineCron()
        .withSeconds().and()
        .withMinutes().and()
        .withHours().and()
        .withDayOfMonth()
            .supportsHash().supportsL().supportsW().and()
        .withMonth().and()
        .withDayOfWeek()
            .withIntMapping(7, 0) 
            .supportsHash().supportsL().supportsW().and()
        .withYear().optional().and()
        .instance();

// 传入要生成的cron表达式类型获取cron定义
cronDefinition = CronDefinitionBuilder.instanceDefinitionFor(CronType.QUARTZ);

支持定时任务的类型:

  1. CRON4J
  2. QUARTZ
  3. UNIX
  4. SPRING
  5. SPRING53

生成cron表达式

import static com.cronutils.model.field.expression.FieldExpressionFactory.*;

Cron cron = CronBuilder.cron(CronDefinitionBuilder.instanceDefinitionFor(CronType.QUARTZ))
    .withYear(always())
    .withDoM(between(SpecialChar.L, 3))
    .withMonth(always())
    .withDoW(questionMark())
    .withHour(always())
    .withMinute(always())
    .withSecond(on(0))
    .instance();

String cronAsString = cron.asString(); // 0 * * L-3 * ? *

各方法对应cron表达式关系:

  1. always:表示*
  2. questionMark:表示?
  3. on:表示具体值
  4. between:表示-,例如,between(0,5)表示0-5
  5. and:表示,,例如,and(on(1),on(5))表示0,5
  6. every:表示/,例如,every(on(2),3)表示2/3

获取cron表达式描述

public class Test {
   

    public static void main(String[] args) {
   
        // 创建cron描述器
        CronDescriptor descriptor = CronDescriptor.instance();
        // 创建cron定义
        CronDefinition cronDefinition = CronDefinitionBuilder.instanceDefinitionFor(QUARTZ);
        // 创建cron解析器
        CronParser cronParser = new CronParser(cronDefinition);
        String describe = descriptor.describe(cronParser.parse("0 0 12 ? * 6"));
        System.out.println(describe);
        describe = descriptor.describe(cronParser.parse("*/45 * * * * ?"));
        System.out.println(describe);
        
        // 设置语言
		descriptor = CronDescriptor.instance(Locale.CHINESE);
        describe = descriptor.describe(cronParser.parse("0 0 12 ? * 6"));
        System.out.println(describe);
        describe = descriptor.describe(cronParser.parse("*/45 * * * * ?"));
        System.out.println(describe);
    }
}
// 运行结果:
at 12:00 at Friday day
every 45 seconds
在 12:00 在 星期五 天
每 45

校验cron表达式的正确性

public class Test {
   

    public static void main(String[] args) {
   
        CronDefinition cronDefinition = CronDefinitionBuilder.instanceDefinitionFor(QUARTZ)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值