Maison  >  Article  >  Java  >  Exemple de code du cache Spring intégré Java

Exemple de code du cache Spring intégré Java

Y2J
Y2Joriginal
2017-05-13 10:29:501591parcourir

Cet article présente principalement l'exemple de code du cache spring intégré de springboot. L'éditeur pense qu'il est plutôt bon. Maintenant, je vais le partager avec vous et le donner comme référence. Suivons l'éditeur et jetons un coup d'œil

Cet article présente comment utiliser le cache Spring par défaut dans Springboot,

Cache déclaratif

Spring définit CacheManager L'interface Cache est utilisée pour unifier différentes technologies de mise en cache. Par exemple, JCache, EhCache, Hazelcast, Guava, Redis, etc. Lorsque nous utilisons Spring pour intégrer Cache, nous devons enregistrer le bean du CacheManager implémenté.

Spring Boot configure automatiquement JcacheCacheConfiguration, EhCacheCacheConfiguration, HazelcastCacheConfiguration, GuavaCacheConfiguration, RedisCacheConfiguration, SimpleCacheConfiguration, etc.

ConcurrenMapCacheManager est utilisé par défaut

Lorsque nous n'utilisons pas d'autres dépendances de cache tierces, Springboot utilise automatiquement ConcurrenMapCacheManager comme gestionnaire de cache.

Dépendances de l'environnement

Introduire les dépendances de l'environnement spring-boot-starter-cache dans le fichier pom :


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

Créez une couche d'accès aux données du livre

Créez d'abord une classe d'entité


public class Book {

private String isbn;
private String title;

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

}

Créez une interface d'accès aux données


public interface BookRepository {

 Book getByIsbn(String isbn);

}

Vous pouvez écrire une opération de requêtede données très complexe, comme l'opérationMySQL, nosql, etc. Afin de démontrer cette châtaigne, j'ai uniquement effectué une opération de retard sur le thread et l'ai considéré comme le temps d'interroger la base de données.

Implémenter la classe d'interface :


@Component
public class SimpleBookRepository implements BookRepository {

 @Override

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

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

}

Classe de test


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

}

Démarrer le programme , vous constaterez que le programme imprime en séquence sur la console :


2014-06-05 12:15:35.783 … : …. Fetching books

2014-06-05 12:15:40.783 … : isbn-1234 –> >Book{isbn=&#39;isbn-1234&#39;, title=&#39;Some book&#39;}

2014-06-05 12:15:43.784 … : isbn-1234 –>Book{isbn=&#39;isbn-1234&#39;, title=&#39;Some book&#39;}

2014-06-05 12:15:46.786 … : isbn-1234 –>Book{isbn=&#39;isbn-1234&#39;, title=&#39;Some book&#39;}

Vous constaterez que le programme imprime une ligne de connexion en séquence pendant 3 secondes. La technologie de mise en cache n’est pas activée pour le moment.

Activer la technologie de mise en cache

Ajoutez @EnableCaching à l'entrée du programme pour activer la technologie de mise en cache :


@SpringBootApplication
@EnableCaching
public class DemoApplication {

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

Ajoutez l'annotation @Cacheable là où la mise en cache est requise, par exemple en ajoutant @Cacheable("books") à la méthode getByIsbn(). Cette méthode active la stratégie de mise en cache Lorsque le cache contient ces données, les données seront renvoyées. directement. Non En attente d'interrogation de la base de données.


@Component
public class SimpleBookRepository implements BookRepository {

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

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

}

Démarrez à nouveau le programme et vous constaterez que le programme imprime :


isbn-1234 –>Book{isbn=&#39;isbn-1234&#39;, title=&#39;Some book&#39;} 
2017-04-23 18:17:09.479 INFO 8054 — [ main] forezp.AppRunner : isbn-4567 –>Book{isbn=&#39;isbn-4567&#39;, title=&#39;Some book&#39;} 
2017-04-23 18:17:09.480 INFO 8054 — [ main] forezp.AppRunner : isbn-1234 –>Book{isbn=&#39;isbn-1234&#39;, title=&#39;Some book&#39;} 
2017-04-23 18:17:09.480 INFO 8054 — [ main] forezp.AppRunner : isbn-4567 –>Book{isbn=&#39;isbn-4567&#39;, title=&#39;Some book&#39;} 
2017-04-23 18:17:09.481 INFO 8054 — [ main] forezp.AppRunner : isbn-1234 –>Book{isbn=&#39;isbn-1234&#39;, title=&#39;Some book&#39;} 
2017-04-23 18:17:09.481 INFO 8054 — [ main] forezp.AppRunner : isbn-1234 –>Book{isbn=&#39;isbn-1234&#39;, title=&#39;Some book&#39;}

Uniquement print Pour les deux premières données, le programme a attendu 3 secondes et les données suivantes ont été instantanément imprimées sur la console, ce qui montre que le cache fonctionne.

【Recommandations associées】

1. Recommandation spéciale : "php Programmer Toolbox" version V0.1 Télécharger

2. Tutoriel vidéo Java gratuit

3 Tutoriel vidéo Java de la Geek Academy

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn