SpringBoot项目中如何在application.yml配置文件中使用算术运算?
问题原因
- 缺失SpEL表达式包裹:properties配置中你使用
#{}标识需要Spring解析的表达式逻辑,但是迁移到YAML后没有保留#{}包裹,Spring会把配置内容识别为普通字符串,不会执行计算。 - YAML语法错误:你在配置中重复定义了
interval根节点,YAML解析时后定义的同层级同名节点会覆盖之前的内容,最终只会保留interval.seconds相关配置,interval.milliseconds.cleaner配置会丢失。 - 特殊字符未转义:YAML中
#是注释标识,如果你直接以#开头写配置值,后面的内容会被识别为注释直接忽略,需要用引号包裹表达式内容。
解决方案
修改为如下正确的YAML配置即可:
seconds: timeOut: 10 interval: milliseconds: cleaner: '#{${seconds.timeOut} * 2 * 1000}' seconds: cleanerOffset: '#{${seconds.timeOut} * 3}'
修改后Spring会正常识别SpEL表达式,完成数值计算,cleaner会解析为数值20000,cleanerOffset会解析为数值30,不会再抛出字符串无法转为Long的异常。
内容的提问来源于stack exchange,提问作者kalosha
相关产品推荐
相关产品推荐

