[Spring guide]

https://spring.io/guides/gs/caching/

오역이 있으면 알려주세요.


소스 코드는 이미 Github에 아주 멋지게 업로드되어 있으므로 필요하지 않지만 핵심 기능에 대한 코드를 읽고 정리할 계획입니다.

전체 파일 소스는 위의 소스 링크를 통해 Github로 이동하여 볼 수 있습니다.

코드마다 설명이 잘 되어 있어서 참고하기 좋았습니다.

@SpringBootApplication 다음을 추가하는 편리한 메모입니다.

  • @Configuration: 애플리케이션 컨텍스트에 대한 빈 정의의 소스로 클래스를 표시합니다.

  • @EnableAutoConfiguration: 클래스 경로 설정, 기타 빈 및 다양한 속성 설정을 기반으로 빈 추가를 시작하도록 Spring Boot에 지시합니다.

    예를 들어 언제 봄 webmvc 클래스 경로에 있는 경우 이 주석은 애플리케이션을 웹 애플리케이션으로 표시하고 다음과 같은 중요한 동작을 활성화합니다.

    B. 설정 Dispatcher서블릿.
  • @ComponentScan: Spring에게 다른 구성 요소, 구성 및 서비스를 찾도록 지시합니다.

    com/example 컨트롤러를 찾을 수 있도록 패키지.

너도 하나 필요해 명령줄 실행기 그 분출 도서 목록 다른 인수로 여러 번 호출합니다.

다음 목록(에서
src/main/java/com/example/caching/AppRunner.java) 이 클래스를 보여줍니다.

스프링 부트 참조 문서

이 섹션에서는 Spring Boot를 사용하는 방법에 대해 자세히 설명합니다.

빌드 시스템, 자동 구성, 애플리케이션 실행 방법과 같은 주제를 다룹니다.

또한 몇 가지 Spring Boot 모범 사례도 다룹니다.

특별한 것은 없지만

docs.spring.io

package com.example.caching;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

@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... args) 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"));
  }

}

캐싱을 사용하지 않으면 동일한 요청에 대해 동일한 데이터를 여러 번 가져옵니다.

간단한 주석 처리를 통한 데이터 캐싱

package com.example.caching;

import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Component;

@Component
public class SimpleBookRepository implements BookRepository {

  @Override
  @Cacheable("books")
  public Book getByIsbn(String isbn) {
    simulateSlowService();
    return new Book(isbn, "Some book");
  }

  // Don't do this at home
  private void simulateSlowService() {
    try {
      long time = 3000L;
      Thread.sleep(time);
    } catch (InterruptedException e) {
      throw new IllegalStateException(e);
    }
  }

}

아주 좋은 CommandLineRunner를 작성하거나 캐싱이 잘 관리되는지 테스트해야 한다고 생각합니다.