首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未指定CacheResolver,也未找到CacheManager类型的唯一bean

未指定CacheResolver,也未找到CacheManager类型的唯一bean
EN

Stack Overflow用户
提问于 2020-06-30 14:12:34
回答 1查看 3.5K关注 0票数 0

我正尝试在我的Spring启动应用程序中使用两种不同类型的缓存,这两种缓存基于名为I hvae的Rest API来将数据存储在缓存中。但是在项目部署阶段,我得到了下面的错误。

主要错误o.s.boot.SpringApplication -应用程序启动失败2020-06-30T11:15:17.05+0530 APP/PROC/WEB/0输出java.lang.IllegalStateException:未指定CacheResolver,且未找到CacheManager类型的唯一bean。将其中一个标记为主(或将其命名为' CacheManager '),或者声明一个要使用的特定CacheManager,作为默认a。

我可以在一个缓存管理器上指定@Primary吗?我希望它不会停止将数据存储到另一个缓存中。或者他们是做这个的更好的方法?

CacheConfig.java

代码语言:javascript
复制
@Profile("cloud")
public class CacheConfig extends AbstractCloudConfig {

@Autowired
Environment env;

@Bean
public RedisConnectionFactory brRedisFactory() {
    return connectionFactory().redisConnectionFactory(env.getProperty("redis_cache"));
}

@Bean
public RedisTemplate<String, Object> brRedisTemplate() {
    RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();
    redisTemplate.setConnectionFactory(brRedisFactory());
    return redisTemplate;
}

@Bean(name = "firstCacheMngr")
public CacheManager cacheManager() {
    RedisCacheManager cacheManager = new RedisCacheManager(brRedisTemplate());
    cacheManager.setUsePrefix(true);
    cacheManager.setTransactionAware(true);
    return cacheManager;
}

@Bean(name = "secondCacheMngr")
public CacheManager springCacheManager() {
    SimpleCacheManager cacheManager = new SimpleCacheManager();
    cacheManager.setCaches(Arrays.asList(new ConcurrentMapCache("secondCache")));
    return cacheManager;
}

}

这就是我在redis缓存中存储数据的方式-

代码语言:javascript
复制
@Cacheable(value="redis-cache",key ="#customerId",cacheManager = "firstCacheMngr")
public CustomerInfo retriveCustomerdetails(String customerId
        String quarterEndDate)  {
     //Calling Rest API 
    }
    return customerInfo;
}
EN

回答 1

Stack Overflow用户

发布于 2020-06-30 22:20:10

您可以将一个放入@Primary,然后使用@Qualifier注入另一个

代码语言:javascript
复制
@Bean(name = "firstCacheMngr")
public CacheManager cacheManager() {
    RedisCacheManager cacheManager = new RedisCacheManager(brRedisTemplate());
    cacheManager.setUsePrefix(true);
    cacheManager.setTransactionAware(true);
    return cacheManager;
}

@Bean(name = "secondCacheMngr")
@Primary
public CacheManager springCacheManager() {
    SimpleCacheManager cacheManager = new SimpleCacheManager();
    cacheManager.setCaches(Arrays.asList(new ConcurrentMapCache("secondCache")));
    return cacheManager;
}

然后使用redisCachManager作为

代码语言:javascript
复制
    @Autowired
    @Qualifier("firstCacheMngr")
    private CacheManager cacheManager;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62651305

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档