计划任务,是任务在约定的时间执行已经计划好的工作,这是表面的意思。在Linux中,我们经常用到 cron 服务器来完成这项工作。cron服务器可以根据配置文件约定的时间来执行特定的任务。
在开发中,需要检验cron表达式的合法性以及获取执行时间。在CronUtil中实现了这些功能。
二、引入maven依赖
<dependency>
<groupId>com.cronutils</groupId>
<artifactId>cron-utils</artifactId>
<version>9.1.3</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.0</version>
</dependency>
package com.asyf.demo.other_api.cron.cronutils;
import com.cronutils.descriptor.CronDescriptor;
import com.cronutils.model.Cron;
import com.cronutils.model.definition.CronDefinition;
import com.cronutils.model.definition.CronDefinitionBuilder;
import com.cronutils.parser.CronParser;
import org.quartz.TriggerUtils;
import org.quartz.impl.triggers.CronTriggerImpl;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import static com.cronutils.model.CronType.QUARTZ;
public class CronUtil {
public static void main(String[] args) throws ParseException {
String expressiion = "0 0 0 ? 5 2#1";
//expressiion = "0 0 0 0 5 2#1";
//格式校验
boolean b = checkValid(expressiion);
System.out.println(b);
if (b) {
//解释cron表达式
String s = describeCron(expressiion);
System.out.println(s);
//获取下次运行时间
List<Date> nextExecTime = getNextExecTime(expressiion, 5);
nextExecTime.stream().forEach(d -> {
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(d));
* 解释cron表达式
public static String describeCron(String expressiion) {
CronDefinition cronDefinition = CronDefinitionBuilder.instanceDefinitionFor(QUARTZ);
CronParser parser = new CronParser(cronDefinition);
Cron cron = parser.parse(expressiion);
//设置语言
CronDescriptor descriptor = CronDescriptor.instance(Locale.CHINESE);
return descriptor.describe(cron);
* 检查cron表达式的合法性
* @param cron cron exp
* @return true if valid
public static boolean checkValid(String cron) {
try {
CronDefinition cronDefinition = CronDefinitionBuilder.instanceDefinitionFor(QUARTZ);
CronParser parser = new CronParser(cronDefinition);
parser.parse(cron);
} catch (IllegalArgumentException e) {
System.out.println(String.format("cron=%s not valid", cron));
return false;
return true;
* @param cronExpression cron表达式
* @param numTimes 下一(几)次运行的时间
* @return
public static List<Date> getNextExecTime(String cronExpression, Integer numTimes) throws ParseException {
List<String> list = new ArrayList<>();
CronTriggerImpl cronTriggerImpl = new CronTriggerImpl();
cronTriggerImpl.setCronExpression(cronExpression);
// 这个是重点,一行代码搞定
return TriggerUtils.computeFireTimes(cronTriggerImpl, null, numTimes);
在 00:00 在 五月 月 星期一 1 每个月
2021-05-03 00:00:00
2022-05-02 00:00:00
2023-05-01 00:00:00
2024-05-06 00:00:00
2025-05-05 00:00:00
目录一、前言二、引入maven依赖三、源码四、测试一、前言计划任务,是任务在约定的时间执行已经计划好的工作,这是表面的意思。在Linux中,我们经常用到 cron 服务器来完成这项工作。cron服务器可以根据配置文件约定的时间来执行特定的任务。在开发中,需要检验cron表达式的合法性以及获取执行时间。在CronUtil中实现了这些功能。二、引入maven依赖<dependency> <groupId>com.cronuti
该gem的目标是
解析
cron
tab时序规范,并确定何时应运行该作业。 它不是调度程序,它不运行作业。
API示例
cron
_parser =
Cron
Parser.new('30 * * * *')
# Next occurrence
next_time =
cron
_parser.next(Time.now)
# Last occurrence
most_recent_time =
cron
_parser.last(Time.now)
Cron
表达式
详解和
表达式
的验证
本篇不算原创,因为主要内容来自网上的博客,所以给出我参考文章的链接。
本文
cron
表达式
详解的大部分内容参考了[
cron
表达式
详解]和
Quartz
使用总结、
Cron
表达式
这两篇文章。
cron
校验
的内容参考了 判断
cron
表达式
输入是否有效的正则
表达式
和Verifying a
cron
expression is valid in
Java
这两篇文章。
一、
表达式
组成
Cron
表达式
是一个字符串,字符串以5或6个空格隔开,分为6或7个域,每一个域代表一个含义,
Cron
Cron
ExpressionValidator.validate
Cron
Expression = function(value) {
var results = true;
if (value == null || value.length == 0) {
return false;
String job
Cron
Express = "xxxxxxxxxx";//此处为
cron
表达式
Cron
Expression
cron
Expression =new
Cron
Expression(job
Cron
Express);//导包import org.
quartz
.
Cron
Expression;
org.springframework.scheduling.
quartz
.
Cron
TriggerBean允许你更精确地控制任务的运行
时间
,只需要设置其
cron
Expression属性。
一个
cron
Expression
表达式
有至少6个(也可能是7个)由空格分隔的
时间
元素。从左至右,这些元素的定义如下:
1.秒(0–59)
2.分钟(0–59)
3.小时(0–23)
4.月份中的日期(1
import
java
.text.ParseException;
import
java
.text.SimpleDateFormat;
import
java
.util.ArrayList;
import
java
.util.Date;
import
java
.util.List;
import org.
quartz
.
Cron
Expression;
import org.
quartz
.
Cron
ScheduleBuilder;
import org.
quartz
.Cr.
public static
Cron
Trigger get
Cron
Trigger(String
cron
) {
if (!
Cron
Expression.isValidExpression(
cron
)) {
throw new...
import
java
.text.ParseException;
import
java
.util.Date;
import org.
quartz
.
Cron
Expression;
public class
Cron
Parser {
public static void main(String[] args) {
String
cron
Expression = " /5 * * * ?";
try {
Cron
Expression
cron
= new
Cron
Expression(
cron
Expression);
Date nextValidTime =
cron
.getNextValidTimeAfter(new Date());
System.out.println(nextValidTime);
} catch (ParseException e) {
e.printStackTrace();
这个示例代码可以
解析
cron
表达式
,并输出下一次
执行
时间
。