【问题标题】:RedisCacheManager.setCacheNames in Spring Boot 2.0Spring Boot 2.0 中的 RedisCacheManager.setCacheNames
【发布时间】:2019-06-27 02:55:16
【问题描述】:

如何在 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);
    }
}

【问题讨论】:

标签: java spring-boot redis


【解决方案1】:

你应该可以这样做:

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));
    }
}

恕我直言,新的构建器模式不利于定制器的工作方式。看起来这可能是对新构建器模式的疏忽。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-05
    • 2014-06-02
    • 2022-08-10
    • 2019-03-05
    • 1970-01-01
    • 2019-02-20
    • 1970-01-01
    • 2021-05-21
    相关资源
    最近更新 更多