有两种情况我希望我的刷新间隔为300000(5分钟),在某些情况下我根本不想要刷新间隔,即我希望我的缓存在整个会话期间保持不变,即我希望刷新被禁用同样,如果我发布冻结,它应该每隔5分钟再次运行。
<cache
eviction="FIFO"
flushInterval="300000"
size="512"
readOnly="true"/>
<select id="getStoreIdAndEqId" resultType="String" flushCache="false" useCache="true">
select count(author) from blog
</select>
我使用的技术是MyBatis和Spring。
答案 0 :(得分:0)
所以,我调试了一点,不幸的是,你的问题的答案是......&#34;有点&#34; ......
当我使用您的缓存配置时,我得到以下缓存结构(Configuration.MappedStatement( ID ).Cache
):
SynchronizedCache
委托缓存到LogingCache
,委托缓存到ScheduledCache
,委托缓存到FifoCache
,委托缓存为{{} 1}}。这些代表中的每一个都做了一些工作(记录等),然后委托其余的。
不幸的是,似乎没有&#34;正常&#34;获取PerpetualCache
的委托的方法,该类无法修改基础SynchronizedCache
对象的设置。当然你可以使用反射来获得它们,但这不是一个好主意。所以,我没有看到使用默认缓存的方法。
这引导我们进入&#34;那种&#34;回答......你可以编写自己的Cache
实现,例如Cache
,来完成工作并通过...设置它。
MyCacheImpl
不幸的是,它将被包装在一个LoggingCache(委托给它)中,你猜对了,LoggingCache也没有提供获取委托的方法。因此,您可能需要在那里做一些解决方法,例如在静态HashMap中注册Caches或类似的东西。当然,这可以很容易地打开一大堆虫子,所以谨慎行事。执行此操作时,您可以直接访问缓存并调用所需的任何行为更改方法。