Heim  >  Artikel  >  Java  >  Codebeispiel für einen in Java integrierten Spring-Cache

Codebeispiel für einen in Java integrierten Spring-Cache

Y2J
Y2JOriginal
2017-05-13 10:29:501546Durchsuche

In diesem Artikel wird hauptsächlich der Beispielcode des in Springboot integrierten Spring-Cache vorgestellt. Der Herausgeber findet ihn ziemlich gut. Jetzt werde ich ihn mit Ihnen teilen und als Referenz geben. Folgen wir dem Editor und werfen wir einen Blick darauf

In diesem Artikel wird erläutert, wie Sie den Standard-Spring-Cache in Springboot verwenden.

Deklarativer Cache

Spring definiert CacheManager Die Cache-Schnittstelle wird verwendet, um verschiedene Caching-Technologien zu vereinheitlichen. Zum Beispiel JCache, EhCache, Hazelcast, Guava, Redis usw. Wenn wir Spring zur Cache-Integration verwenden, müssen wir die Bean des implementierten CacheManagers registrieren.

Spring Boot konfiguriert JcacheCacheConfiguration, EhCacheCacheConfiguration, HazelcastCacheConfiguration, GuavaCacheConfiguration, RedisCacheConfiguration, SimpleCacheConfiguration usw. automatisch für uns.

ConcurrenMapCacheManager wird standardmäßig verwendet

Wenn wir keine anderen Cache-Abhängigkeiten von Drittanbietern verwenden, verwendet Springboot automatisch ConcurrenMapCacheManager als Cache-Manager.

Umgebungsabhängigkeiten

Fügen Sie Spring-Boot-Starter-Cache-Umgebungsabhängigkeiten in die POM-Datei ein:


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

Erstellen Sie eine Buchdatenzugriffsschicht

Erstellen Sie zunächst eine Entitätsklasse


public class Book {

private String isbn;
private String title;

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

}

Erstellen Sie eine Datenzugriffsschnittstelle


public interface BookRepository {

 Book getByIsbn(String isbn);

}

Sie können einen sehr komplexen Daten- Abfrage--Vorgang schreiben, z. B. den Betrieb von MySQL, NOSQL usw. Um diese Kastanie zu demonstrieren, habe ich nur eine Verzögerungsoperation für den Thread durchgeführt und diese als Zeit zum Abfragen der Datenbank betrachtet.

Schnittstellenklasse implementieren:


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

}

Testklasse


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

}

Starten Sie die program , werden Sie feststellen, dass das Programm nacheinander auf der Konsole druckt:


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;}

Sie werden feststellen, dass das Programm 3 Sekunden lang nacheinander eine Protokollzeile ausgibt. Die Caching-Technologie ist derzeit nicht aktiviert.

Caching-Technologie aktivieren

Fügen Sie @EnableCaching zum Eintrag des Programms hinzu, um die Caching-Technologie zu aktivieren:


@SpringBootApplication
@EnableCaching
public class DemoApplication {

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

Fügen Sie die Annotation @Cacheable hinzu, wenn Caching erforderlich ist, z. B. durch Hinzufügen von @Cacheable("books") zur getByIsbn()-Methode. Diese Methode aktiviert die Caching-Strategie, wenn der Cache über diese Daten verfügt direkt. Kein Warten auf Abfrage der Datenbank.


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

}

Starten Sie das Programm erneut und Sie werden feststellen, dass das Programm Folgendes druckt:


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;}

Nur print Für die ersten beiden Daten wartete das Programm 3 Sekunden und die nachfolgenden Daten wurden sofort auf der Konsole gedruckt, was zeigt, dass der Cache funktioniert.

【Verwandte Empfehlungen】

1. Besondere Empfehlung: Version „php Programmer Toolbox“ V0.1 herunterladen

2. Kostenloses Java-Video-Tutorial

3. Geek Academy Java-Video-Tutorial

Das obige ist der detaillierte Inhalt vonCodebeispiel für einen in Java integrierten Spring-Cache. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn