'Cannot find cache named 'xxxx' for Builder - ElasticCache AWS and Spring Boot

I am trying to connect my Spring Boot project to ElasticCache Redis in AWS. However, I get this error:

java.lang.IllegalArgumentException: Cannot find cache named 'XXX' for Builder[public <Class Name> <method Name>(java.lang.String)] caches=['xxxx'] | key='#key' | keyGenerator='' | cacheManager='' | cacheResolver='' | condition='' | unless='' | sync='false'

application.properties

spring.cache.type=redis
spring.redis.host=*****.*****.****.****.cache.amazonaws.com
spring.redis.port=6379
spring.redis.prefix=testing
spring.cache.cache-names=XXXXX
spring.redis.cluster.nodes=node_1, node_2, node_3

RedisConfig.java

@Configuration
@EnableCaching
public class RedisConfig {

    @Value("${spring.redis.host}")
    private String redisHostName;

    @Value("${spring.redis.port}")
    private int redisPort;

    @Value("${spring.redis.prefix}")
    private String redisPrefix;

    @Bean
    JedisConnectionFactory jedisConnectionFactory() {
        System.out.println(redisHostName);
        System.out.println(redisPort);
        RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration(redisHostName, redisPort);
        return new JedisConnectionFactory(redisStandaloneConfiguration);
    }
    
    @Bean(value = "redisTemplate")
    public RedisTemplate<String, Object> redisTemplate() {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(jedisConnectionFactory());
        return redisTemplate;
    }

    @Primary
    @Bean(name = "cacheManager") // Default cache manager is infinite
    public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
        return RedisCacheManager.builder(redisConnectionFactory).cacheDefaults(RedisCacheConfiguration.defaultCacheConfig().prefixKeysWith(redisPrefix)).build();
    }

}

UserDetailsServiceImpl.java

@Override
    @Cacheable(value = "userdetails", key="{#userId}")
    public User getUserDetails(String userId) {
    
        User user =userDAO.getUserbyID(userId);
        
        return user;
         
    }

build.gradle

implementation group: 'org.springframework.boot', name: 'spring-boot-starter-cache', version: '2.6.7'
    
implementation group: 'org.springframework.boot', name: 'spring-boot-starter-data-redis', version: '2.6.7'
    
implementation group: 'redis.clients', name: 'jedis', version: '3.7.1'
    
implementation group: 'org.springframework.cloud', name: 'spring-cloud-aws-dependencies', version: '2.2.6.RELEASE', ext: 'pom'

On invoking the API I get the below error:

java.lang.IllegalArgumentException: Cannot find cache named 'XXX' for Builder[public <Class Name> <method Name>(java.lang.String)] caches=['xxxx'] | key='#key' | keyGenerator='' | cacheManager='' | cacheResolver='' | condition='' | unless='' | sync='false'

Any idea where I am going wrong?



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source