Heim >Java >javaLernprogramm >Codebeispiel für einen in Java integrierten Spring-Cache
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'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='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'}
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'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='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'}
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!