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);