在春季启动2.0 RedisCacheManager.setCacheNames

时间:2019-02-02 22:06:11

标签: java spring-boot redis

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

1 个答案:

答案 0 :(得分:0)

您应该能够做到这一点:

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

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