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

Cacheable e Alteração no Banco de Dados

Ao final do vídeo do AJAX com Axios o instrutor faz um alteração no Banco de Dados para mostrar que os dados da API estão vindo realmente do BD.

No entanto, foi necessário reiniciar a aplicação para visualizar a alteração. Pois devido a anotação @Cacheable no método findByStatus, os dados da consulta antiga ficaram armazenadas em Cache mantendo assim as informações na aplicação desatualizadas.

Ao usar o @Cacheable (de forma default) perdemos um pouco dessa instantaneabilidade, de alterar algo no Banco de Dados e ver a alteração de imediato na Aplicação. Dei uma pesquisada e encontrei uma possível solução definindo um TTL para o @Cacheable criando um arquivo CacheConfig.

Existem outras possíveis soluções? Ou devemos sempre avaliar cada tipo de aplicação se é melhor usar @Cacheacle ou não? Acredito que em aplicações com poucos usuários e que precisam informações atualizadas a todo momento, o @Cacheable não seria uma boa alternativa.

2 respostas
solução!

Fala, Hugo! Tudo bem contigo?

Desculpe a demora em dar um retorno!!!

Muito boa sua solução

Uma outra forma de deixar a aplicação com uma resposta mais rápida também, seria colocar uma outra dependência dentro do nosso pom.xml chamada cache.

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-cache</artifactId>
        </dependency>

Ele vai baixar a dependência e feito isso, inserimos a anotação @EnableCaching na nossa Classe main para habilitar o uso na nossa aplicação.

Agora, podemos utilizar a anotação @Cacheable com um id único para a simples identificação desse cache

@GetMapping        
@Cacheable(value = "nomeQueEuQueiraIdentificar")
public ...

Para sabermos se ele está aplicando o cache podemos testar colocando duas propriedades dentro do application.properties. Uma para mostrar os comandos SQL's e outro para formatar esses comandos de forma mais organizada

spring.jpa.properties.hibernate.show_sql=true
spring.jpa.properties.hibernate.format_sql=true

Agora veja que, ao disparar a requisição, ele mostra no console os comandos utilizados, porém. se fizer novamente, nada será lançado, pois já está guardado em cache e ele simplesmente traz os dados sem precisar buscar novamente.

Esse assunto é muito bem abordado na Aula 02 do Curso Spring Boot API REST: Segurança da API, Cache e Monitoramento.

Espero ter contribuído e obrigado por compartilhar sua solução, Hugo!

Um abraço e bons estudos!!!

Opa, Cássio...beleza?

Legal cara, já terminei o curso mas vou implementar essa solução que você postou.

Muito obrigado.

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