我必须在此应用程序中将XML配置与注释结合使用。在我的配置中,我定义了一个缓存管理器:
<cache:annotation-driven />
<bean id="cacheManager" class="org.springframework.cache.concurrent.ConcurrentMapCacheManager"/>
我为缓存和事务标注了几种服务方法。
@Cacheable("userCache")
@Transactional(readOnly = true)
User getByUsername( String username );
和
@CacheEvict(value = "userCache", allEntries = true),
@Transactional
void save(List<User> users);
我需要通知ConcurrentMapCacheManager
交易。我在文章Spring cache annotations: some tips & tricks中看到了一些示例,这些示例显示了如何通过@Bean
方法将缓存管理器包装在具有事务意识的代理中,但无法弄清楚如何使用XML来实现。
答案 0 :(得分:0)
这是我解决此问题的方法。在我的上下文中,我声明了一个自定义缓存管理器
<cache:annotation-driven />
<bean id="cacheManager" class="com.sample.cache.TransactionAwareCacheManager"/>
自定义缓存管理器是一个事务感知代理,包装了实际的缓存管理器。
package com.sample.cache;
import org.springframework.cache.concurrent.ConcurrentMapCacheManager;
import org.springframework.cache.transaction.TransactionAwareCacheManagerProxy;
public class TransactionAwareCacheManager extends TransactionAwareCacheManagerProxy {
public TransactionAwareCacheManager() {
super(new ConcurrentMapCacheManager());
}
}