雷丰阳Springboot视频培训教程问题解决记录之九——Spring定时任务及Encountered invalid @Scheduled method For Input String错误

本文深入探讨了Spring框架中定时任务的注解参数,包括fixedRate、fixedDelay和cron等,详细解释了它们的使用场景及限制。同时,通过一个具体的错误案例,揭示了cron表达式的正确语法和常见误区。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

支持的注解参数

fixedRate 在调用之间以固定的毫秒数执行该方法。

fixedRateStringfixedRate相同但是使用字符串值。

fixedDelay 在一次调用结束和下一次调用开始之间以固定的毫秒数执行该方法。

fixedDelayStringfixedDelay相同但是使用字符串值。

cron 使用类似cron的表达式来确定何时执行该方法。

zone指示将解析cron表达式的时区,如果未包含时区,则将使用服务器的默认时区。因此,如果需要它来运行特定的时区,比如香港,可以使用zone = "GMT+8:00"

initialDelay 延迟第一次执行计划任务的毫秒数,要求使用固定速率或固定延迟属性之一。

initialDelayStringinitialDelay相同但是使用字符串值。

Spring类cron表达式

格式如下:

[Seconds] [Minutes] [Hours] [Day of month] [Month] [Day of week]

Spring允许的表达式是所有可能的cron表达式的子集,例如它不包含year字段,并且不能使用所有特殊字符。

Seconds可以有值0-59或特殊字符, - * /

Minutes可以有值0-59或特殊字符, - * /

Hours可以有值0-23或特殊字符, - * /

Day of month可以有值1-31或特殊字符, - * ? /

Month可以有值1-12JAN-DEC或特殊字符, - * /

Day of week可以有值1-7SUN-SAT或特殊字符, - * ? /

特殊字符的含义:

* 表示所有值,如果在第二个字段中使用它表示每秒或在日期字段中使用意味着每天运行。

?表示没有特定值,可以在月中或星期几字段中使用,其中一个使用则另一个无效。如果指定在一个月的第15天触发,那么?将在该Day of week字段中使用 。

- 表示包含范围的值,例如小时字段中的1-3表示小时1,2和3。

, 表示其他值,例如星期几中的MON,WED,SUN表示星期一,星期三和星期日。

/ 表示增量,例如秒数字段中的0/15从0(0,15,30和45)开始每15秒触发一次。

Encountered invalid @Scheduled method 。。。For input string错误

@EnableAsync
@EnableScheduling
@SpringBootApplication
public class AsyncdemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(AsyncdemoApplication.class, args);
    }

}
------------------------------------------------------------------------
@Service
public class ScheduledService {

    @Scheduled(cron = "0 22/1 14 ? 4 7L")
    public void scheduledCall() {
        System.out.println("called!");

    }
}

在上文的表达式中,会出现如下错误

Caused by: java.lang.IllegalStateException: Encountered invalid @Scheduled method ‘scheduledCall’: For input string: “7L”

错误的根源是 Spring 的表达式 只是 cron表达式的子集,它不包含year字段,并且不能使用所有特殊字符,比如L和W,大部分的文档有误导。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值