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

如何在Kotlin中为@RetryableTopic的@Backoff读取application.yml中的数值类型配置?

如何在Kotlin中为@RetryableTopic的@Backoff读取application.yml中的数值类型配置?

嗨,我来帮你搞定这个问题!你现在遇到的问题是因为你把配置值当成字符串来解析了,但@Backoff的delay参数需要的是long类型,只要调整一下SpEL表达式的写法就能解决啦。

你之前写的delay表达式是"#{'\${kafka.stuff.delay}'",这里的单引号会让SpEL把配置值解析成字符串,而delay需要的是数值类型,自然就会出错。正确的做法是去掉单引号,直接让SpEL解析数值:

@RetryableTopic(
    attempts = "4",
    // 去掉单引号,直接解析数值类型配置
    backoff = Backoff(delay = "#{\${kafka.stuff.delay}}", multiplier = 2.0),
    // 布尔类型配置也可以用同样方式简化,去掉单引号
    autoCreateTopics = "#{\${kafka.stuff.auto-create}}",
    topicSuffixingStrategy = TopicSuffixingStrategy.SUFFIX_WITH_INDEX_VALUE,
    dltStrategy = DltStrategy.FAIL_ON_ERROR
)
fun myFunction(/* 你的方法参数 */) {
    // 方法逻辑
}

原因其实很简单:当你去掉单引号后,Spring会先把${kafka.stuff.delay}解析成application.yml里的2000(数值类型),然后SpEL直接把这个数值传递给delay参数,完美匹配long类型的要求。

另外提一句,你之前的字符串类型配置写法是没问题的,但对于数值、布尔这种非字符串类型的配置,就不需要加单引号包裹表达式啦,直接让Spring解析成对应类型就行。

这样调整后,delay就能正常读取你配置文件里的long值了,试试吧!

备注:内容来源于stack exchange,提问作者João Matos

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 11:23:13