이 글은 주로 springboot 통합 스프링 캐시의 샘플 코드를 소개합니다. 편집자는 이것이 꽤 좋다고 생각합니다. 이제 이를 여러분과 공유하고 참고용으로 제공하겠습니다. 에디터를 따라가서 살펴봅시다
이 글에서는 springboot에서 기본 spring 캐시를 사용하는 방법을 소개합니다.
선언적 캐시
Spring은 CacheManager를 정의합니다. 캐시 인터페이스는 다양한 캐싱 기술을 통합하는 데 사용됩니다. 예를 들어 JCache, EhCache, Hazelcast, Guava, Redis 등이 있습니다. Cache를 통합하기 위해 Spring을 사용할 때 구현된 CacheManager의 Bean을 등록해야 합니다.
Spring Boot는 JcacheCacheConfiguration, EhCacheCacheConfiguration, HazelcastCacheConfiguration, GuavaCacheConfiguration, RedisCacheConfiguration, SimpleCacheConfiguration 등을 자동으로 구성합니다.
ConcurrenMapCacheManager는 기본적으로 사용됩니다
다른 타사 캐시 종속성을 사용하지 않으면 springboot는 자동으로 ConcurrenMapCacheManager를 캐시 관리자로 사용합니다.
환경 종속성
pom 파일에 spring-boot-starter-cache 환경 종속성을 도입합니다.
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</artifactId> </dependency>
도서 데이터 액세스 레이어 만들기
먼저 엔터티 클래스 만들기
public class Book { private String isbn; private String title; public Book(String isbn, String title) { this.isbn = isbn; this.title = title; } ….getter ….setter }
데이터 액세스 인터페이스 만들기
public interface BookRepository { Book getByIsbn(String isbn); }
연산MySQL, nosql 등과 같은 매우 복잡한 데이터쿼리연산을 작성할 수 있습니다. 이 밤나무를 시연하기 위해 스레드에 대한 지연 작업만 수행하고 데이터베이스를 쿼리하는 시간으로 간주했습니다.
인터페이스 클래스 구현:
@Component public class SimpleBookRepository implements BookRepository { @Override 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); } } }
테스트 클래스
@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")); } }
프로그램을 시작하면 find 프로그램이 콘솔에 인쇄합니다:
2014-06-05 12:15:35.783 … : …. Fetching books 2014-06-05 12:15:40.783 … : isbn-1234 –> >Book{isbn='isbn-1234', title='Some book'} 2014-06-05 12:15:43.784 … : isbn-1234 –>Book{isbn='isbn-1234', title='Some book'} 2014-06-05 12:15:46.786 … : isbn-1234 –>Book{isbn='isbn-1234', title='Some book'}
프로그램이 3초 안에 로그 한 줄을 인쇄하는 것을 볼 수 있습니다. 현재 캐싱 기술이 활성화되어 있지 않습니다.
캐싱 기술 활성화
캐싱 기술을 활성화하려면 프로그램 항목에 @ EnableCaching을 추가하세요.
@SpringBootApplication @EnableCaching public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }
in getByIsbn() 메서드에 @Cacheable("books")을 추가하는 등 캐싱이 필요한 곳에 @Cacheable 주석을 추가합니다. 이 메서드는 캐시에 이 데이터가 있으면 데이터가 직접 반환됩니다. 기다리지 않고 데이터베이스를 쿼리합니다.
@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); } } }
프로그램을 다시 시작하면 프로그램이 다음과 같이 인쇄되는 것을 볼 수 있습니다.
isbn-1234 –>Book{isbn='isbn-1234', title='Some book'} 2017-04-23 18:17:09.479 INFO 8054 — [ main] forezp.AppRunner : isbn-4567 –>Book{isbn='isbn-4567', title='Some book'} 2017-04-23 18:17:09.480 INFO 8054 — [ main] forezp.AppRunner : isbn-1234 –>Book{isbn='isbn-1234', title='Some book'} 2017-04-23 18:17:09.480 INFO 8054 — [ main] forezp.AppRunner : isbn-4567 –>Book{isbn='isbn-4567', title='Some book'} 2017-04-23 18:17:09.481 INFO 8054 — [ main] forezp.AppRunner : isbn-1234 –>Book{isbn='isbn-1234', title='Some book'} 2017-04-23 18:17:09.481 INFO 8054 — [ main] forezp.AppRunner : isbn-1234 –>Book{isbn='isbn-1234', title='Some book'}
처음 2개 데이터만 가 인쇄되고 프로그램은 3초 동안 기다렸다가 후속 데이터가 즉시 콘솔에 인쇄되어 캐시가 작동하고 있음을 보여줍니다.
【관련 추천】
1. 특별 추천: "php Programmer Toolbox" V0.1 버전 다운로드
위 내용은 Java 통합 스프링 캐시의 코드 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!