2
respostas

Cacheable em método que não usa JPA

@Cacheable(value = "jogo")
    public Jogo jogar() {
        Jogo jogo = new Jogo("jogador1", "jogador2");
        System.out.println(jogo);
        return jogo;
    }

Boa noite, Tentei fazer com que esse método retornasse sempre o mesmo objeto, porém sempre que esse método é acionado, eu recebo um "println" de uma nova referência. Gostaria de saber se o cache não é aplicável para métodos que não fazem requisição no banco de dados.

Até tirei o cacheEvict do meu código para ter certeza que não estou invalidando meu cache, mas não estou.

2 respostas

Oi Carlos,

Pode postar o codigo completo da classe onde tem esse metodo?

Rodrigo, aproveitando o post gostaria de perguntar também se posso colocar variável no nome do meu cache, por exemplo jogo{id} Respondendo, a classe é um controller. Já tentei colocar em um service mas não deu certo, segue:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

import br.com.akconsultor.xadrez.dto.MovimentoDto;
import br.com.akconsultor.xadrez.dto.MovimentoVerificaDto;
import br.com.akconsultor.xadrez.dto.TabuleiroDto;
import br.com.akconsultor.xadrez.service.JogoService;
import br.com.akconsultor.xadrez.tabuleiro.Jogo;


@RestController
public class JogoController {

    @Autowired
    private JogoService service;

    @Cacheable(value = "jogo")
    public Jogo jogar() {
        Jogo jogo = new Jogo("jogador1", "jogador2");
        System.out.println(jogo);
        return jogo;
    }

    @CacheEvict(value = "jogo")
    @GetMapping("/novoJogo")
    public ResponseEntity<Long> novoJogo(){
        this.jogar();
        return ResponseEntity.ok(Jogo.getId());
    }

    @PostMapping("/verifica")
    public ResponseEntity<boolean[][]> verificaDestino(@RequestBody MovimentoVerificaDto mov){
        Jogo jogo = this.jogar();
        boolean podeMover[][] = service.verificaDestino(mov, jogo);
        return ResponseEntity.ok(podeMover);
    }

    @PostMapping("/move")
    public ResponseEntity<TabuleiroDto> move(@RequestBody MovimentoDto mov){
        Jogo jogo = this.jogar();
        TabuleiroDto dto = service.move(mov, jogo);
        return ResponseEntity.ok(dto);
    }



}