cache de springboot pequena nota

Pesquisar para encontrar os tutoriais é certamente uma tarefa ingrata, não está mal escrito, mas também para escrever bem, mas no final uma coisa e que não é o sistema. Quanto à introdução de livros de uma autoridade técnica, não sabemos por vários anos antes que possa ser publicado, olhando para os documentos oficiais ingleses lotado, é um especial e um sangue velho pulverizado sobre a tela. Em seguida, pulverizar, você tem que aprender ah. Aprender a aprender ah, ah, eu caí no ciclo acima. Bom e velho ditado, conhecer a profundidade do rio, você tem que pesca no rio pessoalmente menor em águas turbulentas. SO, papel muito puro descreve uma pequena parte do tema do cache, não muito teoria, com foco em projetos por mim mesmo para todos e um guia de nível de entrada para visualização futura.

A fim de não perder tempo para encontrar as respostas de repente você tem sentimentos mistos, nela gravada. Chave para ver a última frase.

Código ambiente de verificação: ideia.

cena

Muitas vezes precisamos de consulta pela entidade id, a situação não é de cache normal são: solicitação de URL, consulta o banco de dados e retornar os resultados. Usando o cache: Pedido de URL-consulta de cache - a cache está diretamente retornou, não consulta o cache do banco de dados - retorna o resultado.

passo de verificação

1. Novo arquivo pom idéia do projeto springboot da seguinte forma:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example.testcache</groupId>
    <artifactId>democache</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>democache</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

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

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>


</project>

2. Queremos simular as necessidades do processo de camada DAO dados de consulta, camada de serviço fornece o serviço. Várias classes estão listados abaixo:
Classe Livro Entidade:

public class Book {
    private String isbn;
    private String title;

    public Book(String isbn, String title) {
        this.isbn = isbn;
        this.title = title;
    }

    public String getIsbn() {
        return isbn;
    }

    public void setIsbn(String isbn) {
        this.isbn = isbn;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    @Override
    public String toString() {
        return "Book{" +
                "isbn='" + isbn + '\'' +
                ", title='" + title + '\'' +
                '}';
    }
}

Consulta de interface BookRepository:

public interface BookRepository {
    Book getByIsbn(String isbn);
}

Interface SimpleBookRepository:

@Component
public class SimpleBookRepository implements BookRepository {

    @Override
    public Book getByIsbn(String isbn) {

        simulateSlowService();
        return new Book(isbn, "Some book");

    }

    private void simulateSlowService() {
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            throw new IllegalStateException(e);
        }
    }
}

O código acima no momento da consulta para se juntar atraso de três segundos, você pode modificá-lo a qualquer momento.
Depois que estávamos prontos para fazer um bom trabalho para testar os dois casos.

Sem-cache caso

Como todos nós sabemos correndo springboot maneira muito simples para iniciar a classe:

@SpringBootApplication
public class DemocacheApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemocacheApplication.class, args);
    }
}

@SpringBootApplication comentário barabara. Não explicou.

Não construído classe de teste, injetamos bookRepository conseguido através de interface CommandLineRunner forma, remover com um método de consulta.

@Component
public class AppRunner implements CommandLineRunner {


    private static final Logger logger = LoggerFactory.getLogger(AppRunner.class);


    private final BookRepository bookRepository;

    public AppRunner(BookRepository bookRepository) {
        this.bookRepository = bookRepository;
    }

    @Override
    public void run(String... strings) throws Exception {
        logger.info(".... Fetching books");
        logger.info("isbn-1234 -->" + bookRepository.getByIsbn("isbn-1234"));
        logger.info("isbn-4567 -->" + bookRepository.getByIsbn("isbn-4567"));
        logger.info("isbn-1234 -->" + bookRepository.getByIsbn("isbn-1234"));
        logger.info("isbn-4567 -->" + bookRepository.getByIsbn("isbn-4567"));
        logger.info("isbn-1234 -->" + bookRepository.getByIsbn("isbn-1234"));
        logger.info("isbn-1234 -->" + bookRepository.getByIsbn("isbn-1234"));

    }
}

Digite o seguinte:

2017/05/27 10: 58: 55,800 INFO 8233 - [principal] com.example.testcache.AppRunner: .... Buscando livros
2017-05-27 10: 58: 58,806 INFO 8233 - [principal] com.example.testcache.AppRunner: ISBN-1234 -> Reserve {isbn = 'ISBN-1234', title = 'Alguns livro'}
2017- 05-27 outubro: 59: 01,809 INFO 8233 - [principal] com.example.testcache.AppRunner: ISBN-4567 -> Reserve {isbn = 'ISBN-4567', title = 'Alguns livro'}
2017/05/27 10 : 59: 04,812 INFO 8233 - [principal] com.example.testcache.AppRunner: ISBN-1234 -> Reserve {isbn = 'ISBN-1234', title = 'Alguns livro'}
2017/05/27 10: 59: 07,813 INFO 8233 - [principal] com.example.testcache.AppRunner: ISBN-4567 -> Reserve {isbn = 'ISBN-4567', title = 'Alguns livro'}

Saída da exibição do registro, recuperando a cada 3 segundos.

Ativar cache

classe Modificar pesquisa método SimpleBookRepository.java:

@Component
public class SimpleBookRepository implements BookRepository {

    @Override
    @Cacheable("books")
    public Book getByIsbn(String isbn) {

        simulateSlowService();
        return new Book(isbn, "Some book");

    }

    private void simulateSlowService() {
        try {
            Thread.sleep(3000L);
        } catch (InterruptedException e) {
            throw new IllegalStateException(e);
        }
    }
}

Além disso, também é necessário adicionar @EnableCaching comentário sobre classe de inicialização:

@SpringBootApplication
@EnableCaching
public class DemocacheApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemocacheApplication.class, args);
    }
}

@EnableCaching conversa fiada

@EnableCaching cheques Notas para as anotações de cache sobre métodos públicos de feijão primavera, se tal comentário é encontrado, ele criará automaticamente proxy para chamadas de método interceptar e comportamento alça cache.
Ele pode ser monitorado para ter nossos comentários muito familiar armazenáveis, CachePut e CacheEvict e assim por diante.
Primavera Bota configurar automaticamente um gerenciador de cache adequado, nosso exemplo não usa a biblioteca de cache especificado como Ehcache, por isso estamos usando seu java.util.concurrent.ConcurrentHashMap baseado em Primavera própria implementado Cache Manager (Este recurso é de Spring3 .1 começou a oferecer).

Iniciar o aplicativo novamente vemos os resultados:

2017/05/27 11: 28: 21,843 INFO 8318 - [principal] com.example.testcache.AppRunner: .... Buscando livros
2017-05-27 11: 28: 24,855 INFO 8318 - [principal] com.example.testcache.AppRunner: ISBN-1234 -> Reserve {isbn = 'ISBN-1234', title = 'Alguns livro'}
2017- 05-27 novembro: 28: 27,860 INFO 8318 - [principal] com.example.testcache.AppRunner: ISBN-4567 -> Reserve {isbn = 'ISBN-4567', title = 'Alguns livro'}
2017/05/27 11 : 28: 27,861 INFO 8318 - [principal] com.example.testcache.AppRunner: ISBN-1234 -> Reserve {isbn = 'ISBN-1234', title = 'Alguns livro'}
2017/05/27 11: 28: 27,861 INFO 8318 - [principal] com.example.testcache.AppRunner: ISBN-4567 -> Reserve {isbn = 'ISBN-4567', title = 'Alguns livro'}
2017/05/27 11: 28: 27,862 INFO 8318 - [ ] principal com.example.testcache.AppRunner: ISBN-1234 -> Reserve {isbn = 'ISBN-1234', title = 'Alguns livro'}
2017/05/27 11: 28: 27,862 INFO 8318 - [principal] com.example.testcache.AppRunner: ISBN-1234 -> Reserve {isbn = 'ISBN-1234', title = 'Alguns livro'}

Você vai encontrar, desde que a entidade requerente tenha visitado, retorne resultados imediatamente a partir do cache.

Publicado 22 artigos originais · ganhou elogios 9 · vê 30000 +

Acho que você gosta

Origin blog.csdn.net/qq_19408473/article/details/72779919
Recomendado
Clasificación