RedisCacheManager.setCacheNames в Spring Boot 2.0 - PullRequest
0 голосов
/ 03 февраля 2019

Как настроить экземпляры RedisCacheManager в Spring 2.0 специально для установки имен кэша и срока действия.

Вот код, который я использовал для работы в 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 голосов
/ 03 февраля 2019

Вы должны быть в состоянии сделать это:

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

ИМХО, новый шаблон компоновщика не так благоприятен для работы настройщиков.Похоже, это могло быть упущением нового образца строителя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...