![](/img/trans.png)
[英]grails delete all data from table / domain class, i.e. “deleteAll”
[英]How to timeout a domain class cache in Grails (i.e. specify max age)
大多数静态,经常访问的域类(例如国家和货币)可以从缓存中受益匪浅。
class country {
:
static mapping = {
cache usage: 'read-only', include: 'non-lazy'
}
}
但是,有时会在多服务器环境中添加新的国家或修改现有的国家。 我们正在寻找的解决方案是缓存超时,以便在每个域类可配置的时间(例如10分钟)之后,它会在请求获取时重新读取数据。
当前,唯一的选择是如果您缓存某些内容,则必须重新启动所有服务器。 我们不希望分发更改的分布式缓存的复杂性,而只是基于每个域的缓存老化选项。
grails 2.4.4是否可能实现此功能,还是我们需要实现自己的缓存层? 使用MyBatis指定最大期限(又名缓存超时)很容易-希望grails具有未记录的功能。
重启服务器远远不是唯一的选择。
mapping
块中用于缓存的配置选项非常有限,但这至少部分是因为没有标准配置API,因此您需要根据提供程序来进行不同的操作。
默认实现是Ehcache,它的配置非常简单。 如果Ehcache在类路径的根目录中找到ehcache.xml
文件,它将使用该文件而不是其默认值。 src/java
非Java文件和grails-app/conf
中的非Java /非Groovy文件在编译过程中被复制到类路径中的目录中,因此最好放置文件以使其可访问。
使用这个注释严重的示例ehcache.xml文件开始使用。
如果要删除一个或多个缓存的实例,Hibernate会提供一个API。 您可以在sessionFactory
bean上调用几种“退出”方法,例如, sessionFactory.evict(Book)
删除所有缓存的Book
实例, sessionFactory.evict(Book, 5)
删除ID为5的缓存Book
,等等。
SpringOne / 2GX演讲的幻灯片中有很多相关信息,包括配置Ehcache和使用2级缓存API。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.