如何使用 Spring Boot 验证 cron 作业

问题描述 投票:0回答:2

我想要一个每上午 00:10 执行一次的 cron 作业

根据在线验证器,这是正确的表达式“0 0/10 0/00 ? * * *” 但它有“?” Spring 拒绝了这一点。

如何正确验证我的 cron 作业?我的假设是这应该有效 '0 0/10 0/00 * * *' 但事实并非如此,请有人指出我正确的方向吗?我究竟做错了什么 ?我想要在午夜后 10 分钟完成一项任务

@Transactional
    @Scheduled(cron = "0 0/10 1/00 * * *")
    public void invalidateOutdatedPolicies() {
        InsurancePolicyStatus policyStatus =  
        System.out.println("Scheduled task done");
    }``
spring-boot scheduled-tasks
2个回答
1
投票

您可以像这样验证模式

public class ValidateCrontab {
    public static void main(String[] args) {
        // {second} {minute} {hour} {day} {month} {week} {year (optional)}
        // Second time, day, month and week, these 6 items are mandatory.

        CronSequenceGenerator cron1 = new CronSequenceGenerator("0 05 10 23 * ?");
        
        CronSequenceGenerator cron2 = new CronSequenceGenerator("0 05 08 ? * MON-FRI");
        Calendar cal = Calendar.getInstance();

        //cal.add(Calendar.DATE, 2); // add two days to current date
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy MMM dd HH:mm:ss");

        System.out.println("current date " + sdf.format(cal.getTime()) +"\n ----");

        System.out.println("Next cron trigger date cron1 " + cron1.next(cal.getTime()));
        System.out.println("Next cron trigger date cron2 " + cron2.next(cal.getTime()));
    }
}

0
投票

CronSequenceGenerator
自 Spring 5.3 起已弃用,取而代之的是
CronExpression

这是一个例子。

// validate if a cron expression is valid.

CronExpression.isValidExpression("0 0 4 L 11/3 SAT"); // output - true

// find next execution date for a cron.

final CronExpression expression = CronExpression.parse("0 0 4 L 11/3 SAT");
expression.next(ZonedDateTime.now(ZoneOffset.UTC)); // output - 2024-11-30T04:00Z
© www.soinside.com 2019 - 2024. All rights reserved.