При попытке вставить данные в кеш Redis с помощью загрузки Spring возникает ошибка времени выполнения

Ошибка ниже при попытке получить данные через кеш Redis: - Нулевой ключ, возвращенный для операции кеширования (возможно, вы используете именованные параметры для классов без отладочной информации?) Builder [public java.util.List com.concretepage.CelebController.getAll ()] caches = [Celebcache] | key = '# p1' | keyGenerator = '' | cacheManager = '' | cacheResolver = '' | условие = '' | if = '' | sync = 'false'] с основной причиной

Пробовали решение других проблем аналогичного типа, переименовав ключ кеширования в # p0, но по-прежнему сталкиваясь с той же ошибкой.

Модель:-

import javax.persistence.*;

@Entity(name = "celeb")
public class Celeb {

    @Id
    @GeneratedValue(strategy= GenerationType.IDENTITY)
    private long id;
    @Column(name = "celeb_name")
    private String name;
    @Column(name = "no_of_followers")
    private long followers;

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public long getFollowers() {
        return followers;
    }

    public void setFollowers(long followers) {
        this.followers = followers;
    }

    @Override
    public String toString() {
        return "Celeb{" +
                "id = " + id +
                ", name='" + name + '\'' +
                ", followers = " + followers +
                '}';
    }
}

Модель контроллера: -

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
public class CelebController {

    Logger logger = LoggerFactory.getLogger("CelebController");

    @Autowired
    private CelebRepository celebRepository;


    @PostMapping("/create")
    public void createUser(@RequestBody Celeb user) {
        celebRepository.save(user);
    }

    @Cacheable(value = "celebcache", key = "#p0")
    @GetMapping("/getall")
    public List<Celeb> getAll() {

        logger.info("Returning from DB");
        return celebRepository.findAll();

    }

    @PostMapping("/delete")
    public void createUser(@RequestParam(value = "userid")Integer id) {
        celebRepository.deleteById(id);
    }


}
0
0
1 117
1

Ответы 1

Как вы отметили, попытка #p0 и #p1 не сработала. Это потому, что он ссылается на метод параметры на метод ... которых в вашем случае нет! Видеть:

// #p0 and #p1 reference non-existing method parameters...
@Cacheable(value = "celebcache", key = "#p0") 
public List<Celeb> getAll(/* zero input parameters */) { ... }

Согласно документы здесь, вам просто не нужно указывать key вообще:

If no params are given, return SimpleKey.EMPTY

Таким образом, должно быть достаточно следующего:

@Cacheable(value = "celebcache")

Да, сейчас нет исключения, но данные не кэшируются. Где на самом деле хранятся мои данные в macbook? Моя текущая конфигурация следующая: - @ Cacheable (value = "celebcache", condition = "# followers> 3000") @GetMapping ("/ getall") public List <Celeb> getAll () {logger.info ("Returning from DB "); вернуть CelebRepository.findAll (); }, но данные все равно загружаются из БД.

Ravi Singh Shekhawat 10.01.2019 17:50

Другие вопросы по теме