我在尝试缓存 aMono
返回的 a时遇到问题WebClient
。代码是这样的:
public Mono<Token> authenticate() {
return cachedTokenMono = cachedTokenMono
.switchIfEmpty(
Mono.defer(() ->
getToken())
.cache(token ->
Duration.between(Instant.now(), token.getExpires().toInstant()),
(Throwable throwable) -> Duration.ZERO,
() -> Duration.ZERO));
}
目的是缓存Mono
用于接收 a 的Token
对象,直到令牌过期。令牌过期后,缓存Mono
变为空并请求新令牌。这可以按预期工作,但不幸switchIfEmpty()
的是实际上并没有“切换”,而是包装了源代码Mono
。结果,随着越来越多的包装SwitchIfEmptyMono
被创建,这会产生内存泄漏。在这种情况下,正确的模式是什么?有没有办法用新的代替空Mono
的?