一篇学会cron表达式

这篇具有很好参考价值的文章主要介绍了一篇学会cron表达式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、定义

Cron表达式是一种用于定义定时任务的格式化字符串。它被广泛用于Unix、Linux和类Unix系统中,用于在指定的时间执行预定的任务。Cron表达式由6个字段组成,每个字段通过空格分隔开。
在本文中,我们将学习如何理解和编写Cron表达式。
Cron表达式的格式如下:

* * * * * *  
| | | | | |  
| | | | | +-- 星期(周日=0 或 7)  
| | | | +---- 月份(1-12)  
| | | +------ 日期(1-31)  
| | +-------- 小时(0-23)  
| +---------- 分钟(0-59)  
+------------ 秒(0-59)

每个字段可以使用数字来表示具体的值,也可以使用一些特殊字符来表示范围、递增等。

下面是一些常用的特殊字符:

:代表所有可能的值,例如在小时字段中表示每一个小时。
?:在日期和星期字段中,表示不指定值。
-:表示范围,例如在小时字段中1-3表示1点到3点。
,:表示列举值,例如在小时字段中1,3,5表示1点、3点和5点。
/:表示递增,例如在分钟字段中*/15表示每15分钟。
下面是一些示例Cron表达式:

1)每分钟的第30秒执行任务:

30 * * * * *

2)每小时的第30分钟执行任务:

* 30 * * * *

3)每天的凌晨1点执行任务:

0 1 * * *

4)每月的第1天的凌晨1点执行任务:

0 1 1 * *

5)每周一的凌晨1点执行任务:

0 1 * * 1

以上只是Cron表达式的一些基本示例,你可以根据自己的需求灵活组合各个字段来定义复杂的定时任务。需要注意的是,Cron表达式的具体语法和支持的特殊字符可能因不同的系统或工具而有所差异,因此在实际使用时最好查阅相关文档进行参考。

2、.NET代码举例

以下是一个使用.NET代码的例子,演示如何创建和执行一个Cron表达式。
首先,你需要安装一个用于解析和执行Cron表达式的.NET库。常用的库是NCrontab和Quartz,你可以通过NuGet包管理器将其添加到你的项目中。
安装完成后,你可以使用以下代码创建一个Cron表达式,并生成一个对应的定时任务。

1)NCrontab

1、安装NCrontab库

一篇学会cron表达式

2、NCrontabUtil工具类

/// <summary>
/// NCrontab解析Cron表达式
/// 不支持秒级
/// </summary>
public static class NCrontabUtil
{
    /// <summary>
    /// 执行NCrontab解析
    /// </summary>
    /// <param name="cronExpression">Cron表达式</param>
    public static void ExecuteNCrontab(string cronExpression)
    {
        // 解析Cron表达式  
        CrontabSchedule schedule = CrontabSchedule.Parse(cronExpression);

        // 获取当前时间  
        DateTime currentTime = DateTime.Now;

        // 计算下一个执行时间  
        DateTime nextOccurrence = schedule.GetNextOccurrence(currentTime);

        Console.WriteLine("下一个执行时间:" + nextOccurrence.ToString());

        // 在下一个执行时间执行任务  
        // 这里只是简单打印一条消息作为示例任务  
        Action task = () => Console.WriteLine("执行任务...");
        task.Invoke();
    }
}

3、调用

// 创建一个Cron表达式
string cronExpression = "";

// NCrontab 不支持秒级
// 在每小时的第一分钟执行任务。这个表达式具体表示在每小时的第一分钟(例如01:01、02:01、03:01等)触发执行相应的任务
// 其他字段的值使用星号()表示,意味着对应字段的所有可能值都被匹配,即任务在每个小时都会执行
cronExpression = "1 * * * *";
NCrontabUtil.ExecuteNCrontab(cronExpression);

4、结果

一篇学会cron表达式

2)Quartz(推荐使用,支持6为表达式->支持秒级)

1、安装Quartz库

一篇学会cron表达式

2、QuartzUtil工具类

/// <summary>
/// Quartz解析Cron表达式
/// 支持秒级
/// </summary>
public static class QuartzUtil
{
    /// <summary>
    /// 执行Quartz解析
    /// </summary>
    /// <param name="cronExpression">Cron表达式</param>
    public async static void ExecuteQuartz(string cronExpression)
    {
        // 创建调度器工厂
        var schedulerFactory = new StdSchedulerFactory();
        // 获取调度器  .ConfigureAwait(false)避免死锁,下同
        var scheduler = await schedulerFactory.GetScheduler().ConfigureAwait(false);
        // 开启调度器
        await scheduler.Start().ConfigureAwait(false);
        // 创建作业
        var job = JobBuilder.Create<MyJob>()
            .WithIdentity("myJob")
            .Build();
        // 创建触发器,并设置CRON表达式
        var trigger = TriggerBuilder.Create()
            .WithIdentity("myTrigger")
            .WithCronSchedule(cronExpression)  
            .Build();

        // 将作业和触发器关联到调度器中
        await scheduler.ScheduleJob(job, trigger).ConfigureAwait(false);

        // 保持主程序的运行,以便调度器持续执行任务  
        Console.WriteLine("Press any key to exit...");
        Console.ReadKey();

        // 关闭调度器
        await scheduler.Shutdown().ConfigureAwait(false);
    }

    // 创建作业类
    public class MyJob : IJob
    {
        public async Task Execute(IJobExecutionContext context)
        {
            // 在这里编写每秒要执行的代码
            if (context.NextFireTimeUtc.HasValue)
            {
                Console.WriteLine("执行任务中...下一次执行任务时间" + context.NextFireTimeUtc.Value.ToLocalTime().DateTime.ToString("yyyy-MM-dd HH:mm:ss"));
            }
            else
            {
                Console.WriteLine("执行任务中...下一次执行任务时间未知");
            }
            await Task.CompletedTask;
        }
    }
}

3、调用

// 创建一个Cron表达式
string cronExpression = "";

// Quartz 支持秒级
// 每秒执行一次的CRON表达式  
cronExpression = "0/1 * * * * ?";
QuartzUtil.ExecuteQuartz(cronExpression);

4、结果

一篇学会cron表达式文章来源地址https://www.toymoban.com/news/detail-747692.html

希望本文能帮助你学会理解和编写Cron表达式,以便在系统中实现定时任务的自动化执行。

到了这里,关于一篇学会cron表达式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • cron表达式语法规则及常见示例

    cron表达式最初是由Unix操作系统中的cron守护进程所使用的一种语法规则,用于设置定时任务。cron守护进程是Unix系统中的一个后台进程,用于周期性地执行指定的命令或脚本。它可以根据用户的需求,按照指定的时间间隔或时间点来执行任务,通常用于定时备份、清理日志、

    2024年02月09日
    浏览(50)
  • Linux|CronTab 的 Cron 表达式

    经典 Cron 表达式包含 5 个位置,中间用空格分隔。其标准语法如下: 其中: [minute] 表示分钟,取值范围 [0, 59] [hour] 表示小时,取值范围 [0, 23] [day of month] 表示日期,取值范围 [0, 31] [month] 表示月份,取值范围 [1, 12] ,也可以用名称简写( Jan - Dec ) [day of week] 表示星期,取值

    2024年02月06日
    浏览(42)
  • java时间解析生成定时Cron表达式工具类

    构建Cron表达式 生成计划的详细描述 构建Cron表达式 枚举类 测试

    2024年02月08日
    浏览(54)
  • Cron表达式简单介绍 + Springboot定时任务的应用

    前言 表达式是一个字符串,主要分成6或7个域,但至少需要6个域组成,且每个域之间以空格符隔开。 以7个域组成的,从右往左是【年 星期 月份 日期 小时 分钟 秒钟】 秒 分 时 日 月 星期 年 以6个域组成的,从右往左是【星期 月份 日期 小时 分钟 秒钟】 秒 分 时 日 月 星

    2023年04月20日
    浏览(35)
  • 深度解析Cron表达式:精确控制任务调度的艺术

    深度解析Cron表达式:精确控制任务调度的艺术 希望我们都可以满怀期待的路过每一个转角 去遇见 那个属于自己故事的开始 去追寻那个最真实的自己 去放下 去拿起 安然,自得,不受世俗牵绊… 导言 在计算机科学领域,任务调度是一项关键的工作。而Cron表达式就是一种强

    2024年02月02日
    浏览(41)
  • Spring 定时任务@Scheduled 注解中的 Cron 表达式

    Spring 框架提供了强大的定时任务功能,通过 @Scheduled 注解可以方便地定义和管理定时任务。其中,Cron 表达式作为定时任务触发的时间表达式,扮演着重要的角色。本篇博客将详细介绍和讲解 Cron 表达式的语法和常见用法,帮助各位更好地理解和使用 Spring 的定时任务功能。

    2024年02月11日
    浏览(41)
  • 使用python 解析Linux cron表达式,输出执行日期

    该方法通过输入linux 的cron 表达式,可以按要求输出调度的时间,方便与实际调度进行校对。

    2024年02月11日
    浏览(45)
  • java中cron表达式 每10分钟执行一次

    在Java中,可以使用Quartz框架来定义和调度任务,包括使用Cron表达式来定义任务的执行时间。下面是一个使用Quartz框架实现每10分钟执行一次任务的示例: 添加Quartz依赖 在Maven项目中,添加以下依赖到pom.xml文件中: xml dependency     groupIdorg.quartz-scheduler/groupId     artifactIdquar

    2024年02月13日
    浏览(40)
  • Java中Cron表达式的生成解析和计算的工具类

    本文介绍通过java生成cron表达式,解析表达式,计算表达式执行日期 需要引入quartz依赖 gitee地址:

    2024年02月07日
    浏览(42)
  • 正则表达式 (用于灵活匹配文本的表达式)

    目录 . * 用于匹配任意单个字符,除了换行符。 例如使用正则表达式 a.b, 它可以匹配aab、acb、a#b 用于匹配前一个字符零次或多次。 例如,使用正则表达式 ab*c ,它可以匹配 \\\"ac\\\"、\\\"abc\\\"、\\\"abbc\\\",因为 b* 表示匹配零个或多个字符 \\\"b\\\"。所以,这个表达式可以匹配 \\\"ac\\\"(零个 \\\"b\\\"),

    2024年01月16日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包