Spring Boot 3.2.1中如何配置接收java.time.Duration的YAML属性?
正确配置Spring Boot中java.time.Duration类型属性的方法
针对server.netty.connection-timeout这个java.time.Duration类型的属性,不能用嵌套seconds和nanos的方式配置,Spring Boot 3.2.1提供两种标准有效配置方式:
1. 使用简化时长格式字符串
直接填写数字加时间单位的字符串,支持的单位包括:
ns(纳秒)、us(微秒)、ms(毫秒)s(秒)、m(分钟)、h(小时)、d(天)
示例配置:
server: netty: connection-timeout: 10s # 配置为10秒
也支持多单位组合:
server: netty: connection-timeout: 1m30s # 配置为1分30秒
2. 使用ISO-8601标准时长格式
遵循ISO-8601的PnDTnHnMn.nS格式,其中:
P为固定前缀,代表"Period"nD、nH、nM分别对应天数、小时数、分钟数,n.nS对应含小数的秒数
示例配置:
server: netty: connection-timeout: PT10S # 配置为10秒
如果需要精确到微秒/纳秒:
server: netty: connection-timeout: PT10.00001S # 配置为10秒加10微秒
补充说明
Spring Boot的配置绑定机制原生支持java.time.Duration类型,会自动解析上述格式的字符串,无需手动编写反序列化逻辑。嵌套seconds和nanos的方式不生效,是因为Duration类没有对应的setter方法或公共构造函数来支持这种嵌套属性绑定。
内容的提问来源于stack exchange,提问作者Sergey Zolotarev
相关产品推荐
相关产品推荐

