调用@Cacheable注释的方法(org.springframework.cache.annotation.Cacheable)

时间:2017-11-22 16:51:36

标签: java spring caching spring-security spring-cache

当调用使用@Cacheable(org.springframework.cache.annotation.Cacheable)注释的方法时,存在于另一个(第三方)项目中会导致以下错误。

Mapper.Initialize(cfg => {
    cfg.CreateMap<Address, AddressDTO>();
    //cfg.CreateMap<Customer, RegisterViewModel>();
});

第三方项目方法的注释如下

java.lang.IllegalArgumentException: Cannot find cache named 'usersCache' for CacheableOperation[public com.epsilon.amp.infra.model.AuthUser com.epsilon.amp.infra.dao.ContextDao.loadContextUser(java.lang.String,java.lang.String)] caches=[usersCache] | key='' | keyGenerator='' | cacheManager='' | cacheResolver='' | condition='' | unless=''

在我的项目中添加注释和启用缓存并不能解决问题。什么可能出错?

1 个答案:

答案 0 :(得分:2)

我建议你创建一个像这样的配置:

@Configuration
public class CacheService extends CachingConfigurerSupport {
    @Bean
    public CacheManager cacheManager() {
        ConcurrentMapCacheManager cacheManager = new ConcurrentMapCacheManager() {
            @Override
            protected Cache createConcurrentMapCache(final String name) {
                return new ConcurrentMapCache(name,
                        CacheBuilder.newBuilder().expireAfterWrite(30, TimeUnit.MINUTES).maximumSize(100).build().asMap(), false);
            }
        };
        return cacheManager;
    }
    @Bean
    @Primary
    public CacheManager guavaCacheManager() {
        return new GuavaCacheManager();
    }
}

之后,您必须在要缓存方法的类的头部添加此注释。

@Cacheable(cacheNames = "guavaCacheManager")

在Application类的头部,这个注释:@EnableCaching

番石榴信息:https://github.com/google/guava