使xml中的ConcurrentMapCacheManager事务感知

时间:2018-07-17 07:10:02

标签: java spring caching spring-data

我必须在此应用程序中将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来实现。

1 个答案:

答案 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());
   }
}