java - Spring Boot 2.0 中的 RedisCacheManager.setCacheNames
问题描述
如何在 Spring 2.0 中专门定制 RedisCacheManager 实例来设置缓存名称和过期时间。
这是我曾经在 1.5.x 中工作的代码,但在 2.x 中失败了
public class RedisCacheManagerCustomizer implements CacheManagerCustomizer<RedisCacheManager> {
...
@Override
public void customize(final RedisCacheManager cacheManager) {
final Map<String, Long> expiresMap = new HashMap<>();
expiresMap.put(CacheNames.ACCESS_TOKEN_TO_ENTRY, accessTokenExpirationInSeconds);
expiresMap.put(CacheNames.REFRESH_TOKEN_TO_ENTRY, jwtMaximumLifetimeInSeconds);
// these two no longer work
cacheManager.setCacheNames(expiresMap.keySet());
cacheManager.setExpires(expiresMap);
}
}
解决方案
你应该能够做到这一点:
public class RedisCacheManagerCustomizer implements CacheManagerCustomizer<RedisCacheManager> {
...
@Override
public void customize(final RedisCacheManager cacheManager) {
setCacheExpiry(cacheManager, CacheNames.ACCESS_TOKEN_TO_ENTRY, accessTokenExpirationInSeconds);
setCacheExpiry(cacheManager, CacheNames.REFRESH_TOKEN_TO_ENTRY, jwtMaximumLifetimeInSeconds);
}
private void setCacheExpiry(RedisCacheManager cacheManager, String name, long expiry) {
((RedisCache) Objects.requireNonNull(cacheManager.getCache(name)))
.getCacheConfiguration().entryTtl(Duration.ofSeconds(expiry));
}
}
恕我直言,新的构建器模式不利于定制器的工作方式。看起来这可能是对新构建器模式的疏忽。
推荐阅读
- python - Pip 命令使 Windows 10 崩溃
- c - 无符号转换 32 位
- rust - actix-web 处理程序中的 HTTP 请求 -> 一次执行多个执行程序:EnterError
- c# - 如何在后台代码运行 C# 时使我的 UI 不冻结
- asp.net-mvc - .Net Core MVC - 属性路由和使用自定义锚标记帮助器构建查询字符串
- javascript - 根据位置合并两个数组以使用 lodash 创建一个新数组
- python - Django Rest Framework:包含默认路由器时覆盖的其他 URL
- json - Open Json 返回 null 的问题
- r - stat_smooth(method = 'lm') 不显示
- networking - URI 方案(即 git+ssh://)中的分层协议是否有公认的标准或替代符号?