Spring提供了CronSequenceGenerator类以便计算cron表达式的具体时间点的next方法(Spring3.2版本)和cron是否合法的isValidExpression方法(Spring4.3版本)。

代码如下:

import java.text.SimpleDateFormat; import java.util.Date; import org.springframework.scheduling.support.CronSequenceGenerator; public class CronSequenceGeneratorTest { public static void main(String[] args) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String cron = "0 */5 * * * ?"; //每个五分钟执行一次 if(CronSequenceGenerator.isValidExpression(cron)) { System.out.println("表达式正确"); CronSequenceGenerator cronSequenceGenerator = new CronSequenceGenerator(cron); Date currentTime = new Date(); System.out.println("currentTime: " + sdf.format(currentTime)); Date nextTimePoint = cronSequenceGenerator.next(currentTime); // currentTime为计算下次时间点的开始时间 System.out.println("nextTimePoint: " + sdf.format(nextTimePoint)); Date nextNextTimePoint = cronSequenceGenerator.next(nextTimePoint); System.out.println("nextNextTimePoint: " + sdf.format(nextNextTimePoint)); }else { System.out.println("表达式错误"); 在我们实际开发中多数会在一些定时 任务 中试用 表达式 来控制 任务 的执行 时间 、频率等。有时候在围绕 任务 调度进行开发的时候,是需要通过解析 表达式 来获取一些信息,例如需要获取 表达式 得下 一次 执行 时间 ,或者让用户在界面上设置 时间 ,我们来生成 cron 表达式 。那么如何来实现这些需求,这里我推荐 cron -utils. Spring boot中使用定时器前言需求执行策略代码部分后话 有个需求是不重启服务器的前提下动态修改 cron 表达式 达到修改下次执行 时间 的目的。一开始参照找的教程去修改 cron 表达式 ,但总会出现一些问题,比如修改完执行 时间 但下 一次 的执行 时间 还是按照默认设置的 时间 去走,这是因为启动服务器后未到第 一次 执行 任务 就修改 时间 导致修改不生效 等奇怪问题,于是后面就放弃了这种动态修改的策略 需求执行策略 服务器启动执行启动定时器步骤 ; 查询数据库查看 是否 cron 表达式 ,有则使用此 表达式 并赋值给类中的 cron 属性 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; impo... public static void main(String[] args) { Cron Sequence Generator cron Sequence Generator = new Cron Sequence Generator ("0 0/1 23 * * ? ", TimeZone.getTimeZone("Asia/Shanghai"));// 通过TimeZone.getAvailableIDs()可以获取所有的TimeZoneID SimpleDateFormat s String job Cron Express = "xxxxxxxxxx";//此处为 cron 表达式 Cron Expression cron Expression =new Cron Expression(job Cron Express);//导包import org.quartz. Cron Expression; Date date = new Date(); Cron Sequence Generator cron Sequence Generator = new Cron Sequence Generator ("0 */5 * * * ?"); Date time1 = cron Sequence Generator .next(date);//下次执行 时间 Date time2 = c. Cron Sequence Generator 计算 cron 表达式 时间 spring 提供了 Cron Sequence Generator 类以便 计算 cron 表达式 的具体 时间 点的next方法 Cron Sequence Generator generator = new Cron Sequence Generator ("30 0/10 * * * ?"); Date next = generator .next(new Da 在使用 spring Cron Sequence Generator 获取 表达式 是否 正确以及 表达式 的下一个触发 日期 时报错 java .lang.NumberFormatException: For input string: "L" 其实就是 spring Cron Sequence Generator 在构造函数中设置 表达式 的时候解析异常 首先将 表达式 按照空格分隔,其次再一个一个解析,解析中对于L字符串没有处理... 一:定时 cron 的格式,一个 cron 表达式 有至少6个(也可能7个)有空格分隔的 时间 元素。按顺序依次为:1.秒(0~59)2.分钟(0~59)3.小时(0~23)4.天(月(0~31,但是你需要考虑你月的天数)5.月(0~11)6.天(星期)(1~7 1=SUN 或 SUN,MON,TUE,WED,THU,FRI,SAT)7.年份(1970-2099)二:定时 cron 可以写的参数其中每个元素可以是一... public static boolean isValidExpression(final String cron Expression){ Cron TriggerImpl trigger = new Cron TriggerImpl(); try { trigger.set Cron Expression( cron Expression);