эх-кеш с граалями 3 - PullRequest
       21

эх-кеш с граалями 3

0 голосов
/ 26 июня 2018

Ehcache не работает должным образом в моем проекте. Я запускаю Grails 3.3.1 "с org.grails.plugins: cache-ehcache: 3.0.0.M1", и так как я не знаю, куда поместить файл ehcache.xml и как он должен выглядеть, я пытался настроить ehcache программно

Я создал сервис cacheService с методом «initCaches», который я запускаю из своего bootstrap.groovy

class CacheService {
void initCaches() {       
    CacheManager cacheManager = CacheManagerBuilder.newCacheManagerBuilder()
        .withCache("sevenSeconds", CacheConfigurationBuilder.newCacheConfigurationBuilder(Long.class, String.class, ResourcePoolsBuilder.heap(10))
            .withExpiry(Expirations.timeToLiveExpiration(Duration.of(7, TimeUnit.SECONDS)))
        )
        .withCache("twentySeconds", CacheConfigurationBuilder.newCacheConfigurationBuilder(Long.class, String.class, ResourcePoolsBuilder.heap(10))
            .withExpiry(Expirations.timeToLiveExpiration(Duration.of(20, TimeUnit.SECONDS)))
        )
        .build()  
    cacheManager.init()
}
}

Когда я запускаю приложение, консоль говорит, что кеши созданы:

2018-06-26 15:47:31.302  INFO --- [           main] org.ehcache.core.EhcacheManager          : Cache 'sevenSeconds' created in EhcacheManager.
2018-06-26 15:47:31.310  INFO --- [           main] org.ehcache.core.EhcacheManager          : Cache 'twentySeconds' created in EhcacheManager.

Теперь я обращаюсь к методу службы, который аннотирован @Cacheable ("sevenSeconds"), и приходит часть, которая меня смущает: опять консоль говорит, что кеш создан (вместо того, чтобы поместить результат в старый уже из CacheService создал один):

2018-06-26 15:47:31.302  INFO --- [           main] org.ehcache.core.EhcacheManager          : Cache 'sevenSeconds' created in EhcacheManager.

Если я снова получу доступ к сервису с теми же параметрами, будет возвращен кешированный результат, НО timeToLive НЕ 7 секунд, как я создал кеш в CacheService.

Похоже, @Cacheable не учитывает мои созданные кэши в CacheService

Кто-нибудь знает, что я делаю неправильно?

ТНХ

1 Ответ

0 голосов
/ 30 июня 2018

Я не знаю, как Grails управляет CacheService и как называется initCaches. Тем не менее, ваш CacheManager является локальной переменной. Так что я ожидаю, что это будет сбор мусора в конце initCaches.

@Cacheable, вероятно, использует какой-то другой CacheManager. Вот что вам следует исправить, сделав CacheManager, созданный в initCaches, доступным для ожидаемого соглашения Grails.

...