如何在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
相关产品推荐
相关产品推荐

