Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Método que recebe a anotação Cacheable

Bom dia professor,

Eu fiz o exemplo da aula de colocar o @Cacheable(value = "ListaDeTopicos") no método lista(...) e funcionou! Mas ai eu fiz um outro teste, eu isolei toda a lógica que tinha nesse controller em outro método, e coloquei a anotação @Cacheable nesse método e percebi que o chache parou de funcionar. Teria alguma explicação para isso?

    @GetMapping
    public Page<TopicoDto> lista(@RequestParam(required = false) String nomeCurso, 
                @RequestParam int pagina, 
                @RequestParam int quantidade,
                @RequestParam String nomeDoCampoParaOrdenacao) {
            System.out.println("METODO LISTA");
        return teste(pagina, quantidade, nomeDoCampoParaOrdenacao, nomeCurso);
    }

        @Cacheable(value = "ListaDeTopicos") // No value colocamos um indicador único para esse cache
    public Page<TopicoDto> teste(int pagina, int quantidade, String nomeDoCampoParaOrdenacao, String nomeCurso) {
        // Pageble é uma interface do spring
        Pageable paginacao = PageRequest.of(pagina, quantidade, Sort.Direction.ASC, nomeDoCampoParaOrdenacao);
        System.out.println("METODO TESTE");
        if (nomeCurso == null) {
            Page<Topico> topicos = topicoRepository.findAll(paginacao);
            return TopicoDto.converter(topicos);
        } else {
            Page<Topico> topicos = topicoRepository.findByCursoNome(nomeCurso, paginacao);
            return TopicoDto.converter(topicos);
        }
    }

O método lista chama o método teste, que posssui a anotação, mas o cache não funciona dessa forma.

Obrigado pela ajuda!

2 respostas
solução!

Oi João,

Infelizmente desse jeito não funciona mesmo, pois essa anotação precisa estar em algum método que é chamado diretamente pelo Spring.

Bons estudos!

Obrigado pela resposta Rodrigo!