带grails的eh-cache 3

时间:2018-06-26 14:21:06

标签: grails3 ehcache-3

Ehcache在我的项目中无法正常工作。 我运行grails 3.3.1“使用org.grails.plugins:cache-ehcache:3.0.0.M1”,由于我不知道将ehcache.xml文件放在哪里以及该文件的外观应该像我尝试以编程方式配置ehcache

我创建了一个带有“ initCaches”方法的cacheService,该方法是从bootstrap.groovy运行的。

public static void main(String... args) {
    TimeZone utcTimeZone = TimeZone.getTimeZone("UTC");
    TimeZone.setDefault(utcTimeZone);
    ...
    timestamp.toLocalDateTime().toLocalDate();
}

启动应用程序时,控制台会显示已创建缓存:

timestamp.toInstant()
        .atZone(ZoneId.of("UTC"))
        .toLocalDate();

现在,我访问一个用@Cacheable(“ sevenSeconds”)注释的服务方法,其中的一部分使我感到困惑:控制台再次说,缓存已创建(而不是将结果放入旧的缓存中)已经从CacheService中创建了一个):

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

如果我使用相同的参数再次访问该服务,则缓存的结果将返回,但timeToLive不是7秒钟,就像我在CacheService中创建缓存一样。

@Cacheable似乎不考虑我在CacheService中创建的缓存

有人知道我在做什么错吗?

thx

1 个答案:

答案 0 :(得分:0)

我不知道Grails如何管理CacheService以及如何调用initCaches。但是,您的CacheManager是局部变量。因此,我希望它会在initCaches的末尾被垃圾回收。

@Cacheable可能正在使用其他CacheManager。因此,应该通过使CacheManager中创建的initCaches对Grails期望的约定可用来解决此问题。