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
答案 0 :(得分:0)
我不知道Grails如何管理CacheService
以及如何调用initCaches
。但是,您的CacheManager
是局部变量。因此,我希望它会在initCaches
的末尾被垃圾回收。
@Cacheable
可能正在使用其他CacheManager
。因此,应该通过使CacheManager
中创建的initCaches
对Grails期望的约定可用来解决此问题。