SpringBoot 配置文件如何转换 Duration 的?

本文介绍了SpringBoot中Duration类型的配置项,用于设置如session超时时间等。Duration类型的值遵循特定的日期时间格式,如PT15M代表15分钟。SpringBoot在解析时提供了简化规则,例如PT15M可以写作15m,并默认转换为毫秒。自定义properties文件可通过@DurationUnit注解指定默认单位。了解这些规则能帮助避免配置错误,提高开发效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Spring Boot 的配置文件经常会出现 Duration 类型的配置项,比如设置 session 的超时时间。

Duration

我们知道 Duration 自己是根据正则进行日期处理的,具体规则如下:

Examples:
    "PT20.345S" -- parses as "20.345 seconds"
    "PT15M"     -- parses as "15 minutes" (where a minute is 60 seconds)
    "PT10H"     -- parses as "10 hours" (where an hour is 3600 seconds)
    "P2D"       -- parses as "2 days" (where a day is 24 hours or 86400 seconds)
    "P2DT3H4M"  -- parses as "2 days, 3 hours and 4 minutes"
    "P-6H3M"    -- parses as "-6 hours and +3 minutes"
    "-P6H3M"    -- parses as "-6 hours and -3 minutes"
    "-P-6H+3M"  -- parses as "+6 hours and -3 minutes"
复制代码

可见表示规则稍显复杂,容易出错,因此 SpringBoot 在解析 Duration 类型时进行了转换。

SpringBoot 对于 Duration 的转换

在 Spring Boot 中配置 Duration 类型,可以使用如下规则:

  • ns for nanoseconds
  • us for microseconds
  • ms for milliseconds
  • s for seconds
  • m for minutes
  • h for hours
  • d for days

比如:PT15M 相当于 15m,配置起来会比较简单,如果不加后缀,只写数字,则 Spring Boot 默认会将其转换为毫秒。

如果是自定义 properties 文件,也可以选择使用 @DurationUnit 注解进行标识默认单位,如:

	@DurationUnit(ChronoUnit.SECONDS)
	private Duration timeout = Duration.ofMinutes(30);
复制代码

参考资料:

### 配置Spring Boot中的服务器发送事件(SSE) 在Spring Boot应用程序中实现服务器发送事件(Server-Sent Events),可以通过创建一个REST控制器来完成。此控制器会返回`TextEventStream`类型的响应体,从而允许客户端持续接收来自服务端的消息。 对于更复杂的场景或者当希望利用现有的库简化开发过程时,可以考虑引入额外的支持包。然而,在基本情况下并不需要特别依赖于如Turbine Stream这样的组件[^1]。 下面是一个简单的例子展示怎样设置SSE: ```java import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class SseController { @GetMapping(value = "/stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE) public Flux<String> streamEvents() { return Flux.interval(Duration.ofSeconds(1)) .map(seq -> "event-" + seq); } } ``` 上述代码片段定义了一个名为`SseController`的类,它包含一个处理GET请求的方法`streamEvents()`。该方法每隔一秒向订阅者推送一条消息直到连接关闭为止。 为了使这段程序正常工作,还需要确保项目里包含了Reactor核心库作为反应式编程的基础支持工具之一。这通常意味着应该把spring-boot-starter-webflux加入到构建文件当中去而不是传统的MVC模块。 另外值得注意的是,如果计划使用Hystrix仪表板监控流数据,则可能需要注意配置项的选择以防止端口冲突等问题的发生。 #### SSE与Observer模式 从设计模式的角度来看,SSE机制实际上遵循了观察者模式的原则。正如所描述那样,典型的观察者模式由两个接口组成——主题(Subject)和观察者(Observer)。在这个上下文中,浏览器扮演着监听者的角色,而Web应用则充当发布通知的主题方[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值