0

我试图在我的 Spring Boot 应用程序中使用两种不同类型的缓存,基于称为 I hvae 的 Rest API 将数据存储在我的缓存中。但是在项目部署阶段,我遇到了错误。

[main] 错误 osboot.SpringApplication - 应用程序启动失败 2020-06-30T11:15:17.05+0530 [APP/PROC/WEB/0] OUT java.lang.IllegalStateException: 没有指定 CacheResolver,也没有找到 CacheManager 类型的唯一 bean . 将一个标记为主要(或将其命名为“cacheManager”)或声明要使用的特定 CacheManager,作为默认值。

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

CacheConfig.java

@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缓存中存储数据的方式-

@Cacheable(value="redis-cache",key ="#customerId",cacheManager = "firstCacheMngr")
public CustomerInfo retriveCustomerdetails(String customerId
        String quarterEndDate)  {
     //Calling Rest API 
    }
    return customerInfo;
}
4

1 回答 1

1

您可以将一个作为@Primary 并使用@Qualifier 注入另一个

@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 作为

    @Autowired
    @Qualifier("firstCacheMngr")
    private CacheManager cacheManager;
于 2020-06-30T14:20:09.567 回答