Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Dúvida com o Cache

Olá a todos.

No curso estamos usando as anotações para a manipulação do cache em nossas próprios controladores

@Controller
public class HomeController {

@RequestMapping("/")
    @Cacheable(value="produtosHome")
    public ModelAndView home(){
        List<Produto> produtos = produtoDao.listar();
}
@Controller
@Scope(value=WebApplicationContext.SCOPE_REQUEST)
public class ProdutosController {

    @RequestMapping(value="/produtos",method=RequestMethod.POST)
    @CacheEvict(value="produtosHome",allEntries = true)
    public ModelAndView grava(MultipartFile sumario,@Valid Produto produto,BindingResult result){

//dao.save.......
        }

    }

a primeira pergunta é: se eu tiver uma outra lógica que contenha essa listagem de produtos em outro controlador qualquer ele já vai estar no cache?

A segunda pergunta é: não seria mais natural(se possível) configurar o cache no próprio repositório?

@Repository
@Transactional
public class ProdutoDAO {

    @PersistenceContext
    private EntityManager manager;

    @CacheEvict(value="produtosHome",allEntries = true)
    public void gravar(Produto produto){

        manager.persist(produto);

    }

    @Cacheable(value="produtosHome")
    public List<Produto> listar() {

        return manager.createQuery("select p from Produto p",Produto.class).getResultList();
    }

    public Produto find(Integer id) {
        return manager.find(Produto.class,id);

    }

}
1 resposta
solução!

Oi Ricardo,

Esse esquema de Cache do SpringMVC, já permite você cachear o resultado do controller, fazendo com que a própria rederização da View seja cacheada. Ou seja, ele já tem a View montada no servidor, e não precisa nem processar a View mais.

Isso por si só, já trás um bom ganho de performance na chamada das suas telas.

Sim, é possível fazer o cache no repository, o problema é que ainda teremos que processar a View.

Sobre a primeira pergunta, a resposta é não, não são todas as lista que ficam cacheadas, apenas a chamada daquele método de produtos da Home. Fazendo como você disse, aí sim seria todas as chamadas do list estariam cacheadas.

Qualquer dúvida, só comentar.

Abraço

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software