# cronHelper **Repository Path**: zcmmmm/cron-helper ## Basic Information - **Project Name**: cronHelper - **Description**: 鼠标悬浮于 cron 表达式即可显示接下来 5 次执行时间 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2023-02-21 - **Last Updated**: 2025-08-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # cronHelper > 鼠标悬浮于 cron 表达式即可显示接下来 5 次执行时间 > > 目前只支持 Java 语言 ![myCron](img/myCron.png) | 技术 | 版本 | | :--------------------: | :----: | | JDK | 17 | | Gradle | 8.0 | | org.jetbrains.intellij | 1.13.0 | | quartz | 2.3.2 | | junit | 4.12 | #### 背景 目前流行的 cron 插件基本都是提供 cron 表达式的描述,比如 `0/1 * * * * ? ` 表示每秒执行一次,描述对应为 `Every Second`,但是这个描述可能出现不准确的情况,如 `0/35 * * * * ? ` 描述为每 35 秒执行一次 ![everySecond](img/everySecond.png) ![every35Second](img/every35Second.png) 然而正确的解释是每 35 秒执行一次,每分钟刷新间隔 ``` 0/35 * * * * ? 2023-02-21 11:31:35 2023-02-21 11:32:00 2023-02-21 11:32:35 2023-02-21 11:33:00 2023-02-21 11:33:35 ``` 为解决这个问题开发出插件 `CronHelper` 鼠标在 cron 表达式上方悬浮时显示接下来 5 次 cron 表达式执行的时间 ![myCron](img/myCron.png) #### 流程 首先是找官方文档,但是官方文档过于繁琐,定位不准确 后来是下载目前流行的 cron 插件先照猫画虎地实现一遍,在复现过程中发现两个问题: - 其原理是遍历 java 文本中的所有字符并进行扫描匹配 cron 表达式,对于大文件效率过低 - 原插件是实现对 cron 表达式的描述,而描述是不会改变的,不修改表达式的情况下只需要做一次扫描即可;但如果要显示接下来 5 次执行时间,则必须进行实时更新 然后针对这两个问题想到解决思路: - 解析鼠标悬浮位置对应字符,并判断是否为 cron 表达式(解决了全文扫描的痛点) - 如果为 cron 表达式则解析并提示最近 5 次执行时间 - 由于每次鼠标悬浮时都会调用该插件,所以是实时更新的(解决了非实时更新的痛点) #### 难点 - 配环境:第一次开发 IDEA 插件,使用 gradle 而非 maven 进行包和依赖管理,很多版本一致性问题 - 监听鼠标悬浮事件:由于第一次接触 IDEA 插件开发,加上官方文档过于繁琐,各种博客文档参考资料少,所以全靠自己摸索(类比 awt 包中 JPanle 的鼠标监听事件,插件开发还包含注册等操作) - 提示换行:IDEA 的提示 `quick documentation `是 html 的格式,所以换行符 `\r\n` 不生效,查阅各种资料尝试各种换行符后解决(html 格式中 `
` 表换行符)