获取Cron表达式的执行间隔时间

2024-08-21 16:28

本文主要是介绍获取Cron表达式的执行间隔时间,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在工作中遇到了一个问题,需求是:某监控数据有多个监控指标,不同指标的更新间隔不同,但都是以 cron 表达式记录。需要按照指标中的最短更新间隔时间来更新此数据的监控状态。于是问题就来到了如何根据可变参数设置定时任务以及如何将 cron 表达式转化为以毫秒为单位的 Long 对象。

1. Cron 表达式介绍

CRON表达式的格式是一个字符串,共有六个字段,分别代表秒、分、小时、日期、月份、星期。每个字段都可以使用通配符、范围、逗号分隔的列表以及"/"取模符号等来表示时间规则。CRON表达式包含了六个部分,分别表示任务执行的时间点。这些部分被空格分隔开,依次表示:

秒(0 - 59) 钟(0 - 59)时(0 - 23)日(1 - 31)月(1 - 12)星期(0 - 6,0表示星期日)

例如:

序号CRON表达式含义
10 * * * * ?每小时的0分0秒执行任务
20 */5 * * * *每隔5分钟执行一次任务
30 */10 * * * *每隔10分钟执行一次任务
40 */15 * * * *每隔15分钟执行一次任务
50 5 0 * * *每天凌晨0点5分0秒执行一次任务

详细介绍参考:CRON表达式,让你轻松掌握定时任务设置

2. 根据 Cron 表达式获取执行间隔时间

    public static void main(String[] args) throws ParseException {List<String> cronList = List.of("0 0/10 * * * ?", "0 0/5 * * * ?", "0 0/1 * * * ?");String shortestExpression = findShortestIntervalCronExpression(cronList);System.out.println("Cron 表达式中间隔时间最短的是:" + shortestExpression + ",执行间隔为:" + getIntervalBetweenExecutions(shortestExpression));}//获取多个cron表达式中执行间隔最短的public static String findShortestIntervalCronExpression(List<String> cronExpressions) {long minInterval = Long.MAX_VALUE;String shortestExpression = null;for (String expression : cronExpressions) {try {CronExpression cron = new CronExpression(expression);Date date = new Date();long time = date.getTime();long interval = cron.getNextValidTimeAfter(date).getTime() - time;if (interval < minInterval) {minInterval = interval;shortestExpression = expression;}} catch (ParseException e) {e.printStackTrace();}}return shortestExpression;}//根据cron表达式获取其执行间隔时间的long对象public static long getIntervalBetweenExecutions(String cronExpression) {try {CronExpression cron = new CronExpression(cronExpression);Date now = new Date();Date nextExecutionTime = cron.getNextValidTimeAfter(now);Date followingExecutionTime = cron.getNextValidTimeAfter(nextExecutionTime);return followingExecutionTime.getTime() - nextExecutionTime.getTime();} catch (ParseException e) {e.printStackTrace();return -1;}}

3. 根据可变参数设置定时任务

@Configuration
@Slf4j
public class ScheduledTask{@Beanpublic ScheduledExecutorService scheduledExecutorService() {ThreadFactory threadFactory = new ThreadFactoryBuilder().setNameFormat("ScheduledTask-%d").build();return new ScheduledThreadPoolExecutor(2, threadFactory);}//根据自己实际业务需求,获取执行间隔时间的方法getInterval()@Autowiredprivate MyService myService;@PostConstructpublic void init() {scheduledExecutorService().scheduleAtFixedRate(() -> {//... 编写自己的任务代码}, 0, myService.getInterval(), TimeUnit.MILLISECONDS);}}

这篇关于获取Cron表达式的执行间隔时间的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1093679

相关文章

Python获取C++中返回的char*字段的两种思路

《Python获取C++中返回的char*字段的两种思路》有时候需要获取C++函数中返回来的不定长的char*字符串,本文小编为大家找到了两种解决问题的思路,感兴趣的小伙伴可以跟随小编一起学习一下... 有时候需要获取C++函数中返回来的不定长的char*字符串,目前我找到两种解决问题的思路,具体实现如下:

golang获取当前时间、时间戳和时间字符串及它们之间的相互转换方法

《golang获取当前时间、时间戳和时间字符串及它们之间的相互转换方法》:本文主要介绍golang获取当前时间、时间戳和时间字符串及它们之间的相互转换,本文通过实例代码给大家介绍的非常详细,感兴趣... 目录1、获取当前时间2、获取当前时间戳3、获取当前时间的字符串格式4、它们之间的相互转化上篇文章给大家介

Python获取中国节假日数据记录入JSON文件

《Python获取中国节假日数据记录入JSON文件》项目系统内置的日历应用为了提升用户体验,特别设置了在调休日期显示“休”的UI图标功能,那么问题是这些调休数据从哪里来呢?我尝试一种更为智能的方法:P... 目录节假日数据获取存入jsON文件节假日数据读取封装完整代码项目系统内置的日历应用为了提升用户体验,

微信公众号脚本-获取热搜自动新建草稿并发布文章

《微信公众号脚本-获取热搜自动新建草稿并发布文章》本来想写一个自动化发布微信公众号的小绿书的脚本,但是微信公众号官网没有小绿书的接口,那就写一个获取热搜微信普通文章的脚本吧,:本文主要介绍微信公众... 目录介绍思路前期准备环境要求获取接口token获取热搜获取热搜数据下载热搜图片给图片加上标题文字上传图片

Spring定时任务只执行一次的原因分析与解决方案

《Spring定时任务只执行一次的原因分析与解决方案》在使用Spring的@Scheduled定时任务时,你是否遇到过任务只执行一次,后续不再触发的情况?这种情况可能由多种原因导致,如未启用调度、线程... 目录1. 问题背景2. Spring定时任务的基本用法3. 为什么定时任务只执行一次?3.1 未启用

使用Python实现获取网页指定内容

《使用Python实现获取网页指定内容》在当今互联网时代,网页数据抓取是一项非常重要的技能,本文将带你从零开始学习如何使用Python获取网页中的指定内容,希望对大家有所帮助... 目录引言1. 网页抓取的基本概念2. python中的网页抓取库3. 安装必要的库4. 发送HTTP请求并获取网页内容5. 解

SpringBoot @Scheduled Cron表达式使用方式

《SpringBoot@ScheduledCron表达式使用方式》:本文主要介绍SpringBoot@ScheduledCron表达式使用方式,具有很好的参考价值,希望对大家有所帮助,如有... 目录Cron 表达式详解1. 表达式格式‌2. 特殊字符解析3. 常用示例‌4. 重点规则5. 动态与复杂场景‌

C++常见容器获取头元素的方法大全

《C++常见容器获取头元素的方法大全》在C++编程中,容器是存储和管理数据集合的重要工具,不同的容器提供了不同的接口来访问和操作其中的元素,获取容器的头元素(即第一个元素)是常见的操作之一,本文将详细... 目录一、std::vector二、std::list三、std::deque四、std::forwa

使用Python高效获取网络数据的操作指南

《使用Python高效获取网络数据的操作指南》网络爬虫是一种自动化程序,用于访问和提取网站上的数据,Python是进行网络爬虫开发的理想语言,拥有丰富的库和工具,使得编写和维护爬虫变得简单高效,本文将... 目录网络爬虫的基本概念常用库介绍安装库Requests和BeautifulSoup爬虫开发发送请求解

Spring Boot 集成 Quartz 使用Cron 表达式实现定时任务

《SpringBoot集成Quartz使用Cron表达式实现定时任务》本文介绍了如何在SpringBoot项目中集成Quartz并使用Cron表达式进行任务调度,通过添加Quartz依赖、创... 目录前言1. 添加 Quartz 依赖2. 创建 Quartz 任务3. 配置 Quartz 任务调度4. 启