1

有没有办法使用 Spring Framework 的缓存抽象来始终返回对象的缓存化身?

我有一个图像调整大小的方法。该resize()方法返回一个临时文件,该临时文件使用我使用 Spring 的缓存抽象的File手动二进制文件进行缓存。Cache该方法本身是通过缓存的,@Cacheable并且一切正常。

困难在于,我需要在将这种方法生成的临时文件添加到缓存后以某种方式清理它们。

换句话说,当前的行为是:

  1. 第一次调用resize()- 返回生成的文件,/tmp/somefile.jpgSpring 将其添加到缓存中。

  2. 第二次调用resize()- 导致缓存命中,因此从/myCache/somefile.jpg

这导致临时文件挥之不去。

我无法在我的Cache#put(Object key, Object value)方法中删除源文件,因为这是从关联方法的非缓存调用返回的文件。

有没有人遇到过类似的情况并用优雅的解决方案解决了它?理想情况下,我希望所有可缓存方法的调用都返回缓存的对象。

4

1 回答 1

2

我通过直接与Cache#get()and交互解决了这个问题Cache#put(),绕过了 Spring 更优雅的基于注释的方法。

它不漂亮,但它有效。

于 2013-01-25T19:33:03.330 回答