gpt4 book ai didi

spring - 我应该如何将 @CachePut 和 @CacheEvict 注释与 ehCache 一起使用(ehCache 2.4.4,Spring 3.1.1)

转载 作者:IT老高 更新时间:2023-10-28 13:59:13 25 4
gpt4 key购买 nike

我尝试了一些新的 Spring 特性,发现 @CachePut 和 @CacheEvict 注释没有效果。可能是我做错了什么。你能帮帮我吗?

我的 applicationContext.xml。

<cache:annotation-driven />

<!--also tried this-->
<!--<ehcache:annotation-driven />-->

<bean id="cacheManager"
class="org.springframework.cache.ehcache.EhCacheCacheManager"
p:cache-manager-ref="ehcache"/>
<bean id="ehcache"
class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"
p:config-location="classpath:ehcache.xml"/>

这部分效果很好。

@Cacheable(value = "finders")
public Finder getFinder(String code)
{
return getFinderFromDB(code);
}

@CacheEvict(value = "finders", allEntries = true)
public void clearCache()
{
}

但如果我想从缓存中删除单个值或覆盖它,我不能这样做。我测试了什么:

@CacheEvict(value = "finders", key = "#finder.code")
public boolean updateFinder(Finder finder, boolean nullValuesAllowed)
{
// ...
}

/////////////

@CacheEvict(value = "finders")
public void clearCache(String code)
{
}

/////////////

@CachePut(value = "finders", key = "#finder.code")
public Finder updateFinder(Finder finder, boolean nullValuesAllowed)
{
// gets newFinder that is different
return newFinder;
}

最佳答案

我找到了它不起作用的原因。我从同一个类中的其他方法调用了这个方法。所以这个调用没有通过 Proxy 对象,因此注释不起作用。

正确示例:

@Service
@Transactional
public class MyClass {

@CachePut(value = "finders", key = "#finder.code")
public Finder updateFinder(Finder finder, boolean nullValuesAllowed)
{
// gets newFinder
return newFinder;
}
}

@Component
public class SomeOtherClass {

@Autowired
private MyClass myClass;

public void updateFinderTest() {
Finder finderWithNewName = new Finder();
finderWithNewName.setCode("abc");
finderWithNewName.setName("123");
myClass.updateFinder(finderWithNewName, false);
}
}

关于spring - 我应该如何将 @CachePut 和 @CacheEvict 注释与 ehCache 一起使用(ehCache 2.4.4,Spring 3.1.1),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9500574/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com