You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot 2.7.7中@Scheduled读取配置转long报错求助

解决Spring Boot 2.7.7 @Scheduled fixedRate配置类型转换问题

方案一:使用fixedRateString属性(推荐)

Spring 4.3及以后版本的@Scheduled注解新增了fixedRateString、fixedDelayString等字符串类型的属性,专门用于接收配置文件中的字符串值,Spring会自动完成类型转换:

@Scheduled(fixedRateString = "${scheduler.pollingInterval}", timeUnit = TimeUnit.MINUTES)

只需把原注解中的fixedRate替换为fixedRateString即可,无需额外转换逻辑。

方案二:通过SpEL表达式手动转换类型

如果坚持使用fixedRate属性,可以借助SpEL的类型转换能力,将配置的字符串值转为long类型:

@Scheduled(fixedRate = "#{T(java.lang.Long).parseLong('${scheduler.pollingInterval}')}", timeUnit = TimeUnit.MINUTES)

这里通过T(java.lang.Long)调用Long类的静态方法parseLong,将配置文件中读取的字符串转为long类型。

为什么之前的写法无效?

你尝试的#{${scheduler.pollingInterval}}写法,当配置值是纯数字时,SpEL会将其解析为Integer类型,而fixedRate需要的是long类型,依然存在类型不兼容问题;如果配置值是带引号的字符串数字,解析后还是String,同样不符合要求。上述两种方案则明确处理了类型转换的问题。

内容的提问来源于stack exchange,提问作者Matt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 07:52:40