[JAVA] Verwenden Sie den Cache mit EhCashe 2.x mit Spring Boot

Hintergrund

Ich habe Spring Boot verwendet und wollte einen Cache implementieren, also habe ich es versucht.

Ausführungsumgebung

Cache im Spring Boot

In Spring Boot sind mehrere Caches verfügbar. https://docs.spring.io/spring-boot/docs/2.1.6.RELEASE/reference/html/boot-features-caching.html

Von oben betrachtet scheint EhCache 2.x einfach zu installieren zu sein. Es wird gesagt, dass wenn ehcache.xml im Klassenpfad vorhanden ist, es verwendet wird, so dass es einfach einzuführen scheint, also werde ich es versuchen.

EhCache 2.x

Implementierung

Aufrufer einer Methode, die den Cache verwendet

Rufen wir es diesmal aus der Klasse auf, die mit "@ SpringBootApplication" versehen ist. Kommentieren Sie "@ EnableCaching"

CacheApplication.java


@SpringBootApplication
@EnableCaching
public class CacheApplication implements CommandLineRunner {

	@Autowired
	Cache cache;

	private final static Logger logger = LoggerFactory.getLogger(CacheApplication.class);
	private final static DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("HH:mm:ss");

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

	public void run(String[] args){

		this.getValue("Zwischengespeichert werden");
		this.getValue("Zwischengespeichert werden");//Zwischengespeichert werden
		this.getValue("Nicht zwischengespeichert, da die Argumente unterschiedlich sind");//Nicht zwischengespeichert, da die Argumente unterschiedlich sind
		this.getValue("Zwischengespeichert werden");//引数違うのを挟んでZwischengespeichert werden
		try {
			Thread.sleep(3000L);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		this.getValue("Zwischengespeichert werden");//Das Argument ist das gleiche, wird jedoch nicht zwischengespeichert, da die Überlebenszeit abgelaufen ist
	}

	public void getValue(String key){
		logger.info(key + " Start at: " + LocalDateTime.now().format(dateTimeFormatter));
		String ret = cache.getFromCache(key); //Cache-fähige Methode
		logger.info(ret + " End at: " + LocalDateTime.now().format(dateTimeFormatter));
	}
}

Klassen, die den Cache verwenden

Fügen Sie der Methode, für die Sie das Caching aktivieren möchten, "@ Cacheable" hinzu

Cache.java


@Component
public class Cache {

    @Cacheable("getCache") //Aktivieren Sie das Caching für diese Methode
    public String getFromCache(String key){
        try {
            Thread.sleep(3000L);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return "End getFromCache:" + key;
    }
}

pom.xml Fügen Sie pom.xml zwei Systeme hinzu, "Spring-Boot-Starter-Cache" und "Ehcache".

pom.xml


<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
  <groupId>net.sf.ehcache</groupId>
  <artifactId>ehcache</artifactId>
  <version>2.10.3</version>
</dependency>

ehcache.xml Erstellen Sie ehcache.xml unter src / main / resources /. Setzen Sie timeToLiveSeconds auf 5 und die Cache-Lebensdauer auf 5 Sekunden.

ehcache.xml


<?xml version="1.0" encoding="UTF-8"?>
<ehcache>
    <diskStore path="java.io.tmpdir"/>
    <cache
            name="getCache"
            timeToLiveSeconds="5"
            maxEntriesLocalHeap="0">
    </cache>
</ehcache>

application.properties Fügen Sie application.properties die folgenden Einstellungen hinzu, um ehcache zu verwenden. Dies ist nicht erforderlich, wenn der einzige verfügbare Cache ehcache ist.

spring.cache.type=ehcache

Lauf

Ich werde das machen. Das Ausführungsergebnis ist wie folgt.

2020-02-29 21:29:48 -Zwischengespeichert Start um: 21:29:48
2020-02-29 21:29:51 - End getFromCache:Zwischengespeichertes Ende bei: 21:29:51
2020-02-29 21:29:51 -Zwischengespeichert Start um: 21:29:51
2020-02-29 21:29:51 - End getFromCache:Zwischengespeichertes Ende bei: 21:29:51
2020-02-29 21:29:51 -Nicht zwischengespeichert, da die Argumente unterschiedlich sind: 21:29:51
2020-02-29 21:29:54 - End getFromCache:Nicht zwischengespeichert, da die Argumente unterschiedlich sind: 21:29:54
2020-02-29 21:29:54 -Zwischengespeichert Start um: 21:29:54
2020-02-29 21:29:54 - End getFromCache:Zwischengespeichertes Ende bei: 21:29:54
2020-02-29 21:29:57 -Zwischengespeichert Start um: 21:29:57
2020-02-29 21:30:00 - End getFromCache:Zwischengespeichertes Ende bei: 21:30:00

Wir werden die Ergebnisse unten sehen. Das erste Mal dauert es 3 Sekunden, aber das zweite Mal ist ein Moment, also scheint der Cache zu funktionieren.

2020-02-29 21:29:48 -Zwischengespeichert Start um: 21:29:48
2020-02-29 21:29:51 - End getFromCache:Zwischengespeichertes Ende bei: 21:29:51
2020-02-29 21:29:51 -Zwischengespeichert Start um: 21:29:51
2020-02-29 21:29:51 - End getFromCache:Zwischengespeichertes Ende bei: 21:29:51

Wenn Sie ein anderes Argument übergeben, wird es nicht zwischengespeichert, sodass es weitere 3 Sekunden dauert.

2020-02-29 21:29:51 -Nicht zwischengespeichert, da die Argumente unterschiedlich sind: 21:29:51
2020-02-29 21:29:54 - End getFromCache:Nicht zwischengespeichert, da die Argumente unterschiedlich sind: 21:29:54

Die folgenden Überlebenszeiten betragen mehr als 5 Sekunden, sodass sie nicht zwischengespeichert werden und 3 Sekunden dauern.

2020-02-29 21:29:57 -Zwischengespeichert Start um: 21:29:57
2020-02-29 21:30:00 - End getFromCache:Zwischengespeichertes Ende bei: 21:30:00

Der Cache verhält sich wie vorgesehen.

Impressionen

Ich dachte, SpringBoot und EhCache2.X sind schnell, weil der Cache nur mit Anmerkungen und Konfigurationsdateien implementiert werden kann. Nachdem Sie jedoch erfahren haben, dass die EhCache3-Serie bereits verfügbar ist, ist es möglicherweise nicht üblich, die Verwendung der EhCache2-Serie zu wagen.

Als ich Koffein ausprobierte, konnte ich den Cache auf die gleiche Weise implementieren, so dass ich das anscheinend auch verwenden kann. Der folgende Artikel war hilfreich. https://qiita.com/yut_arrows/items/4b664acdfa852c0bd6cd

Recommended Posts

Verwenden Sie den Cache mit EhCashe 2.x mit Spring Boot
Beginnend mit Spring Boot 0. Verwenden Sie Spring CLI
Mit Spring Boot herunterladen
Verwendung von MyBatis2 (iBatis) mit Spring Boot 1.4 (Spring 4)
Verwendung des eingebauten h2db mit Federstiefel
Servlet-Filter mit Spring Boot verwenden [Spring Boot 1.x, 2.x kompatibel]
Generieren Sie mit Spring Boot einen Barcode
Hallo Welt mit Spring Boot
Implementieren Sie GraphQL mit Spring Boot
Beginnen Sie mit Spring Boot
Führen Sie LIFF mit Spring Boot aus
SNS-Login mit Spring Boot
Datei-Upload mit Spring Boot
Spring Boot beginnt mit dem Kopieren
Spring Boot + Springfox Springfox-Boot-Starter 3.0.0 Verwendung
Hallo Welt mit Spring Boot
Erste Schritte mit Spring Boot
Erstellen Sie mit Spring Boot einen Mikrodienst
Mail mit Spring Boot verschicken
Datei-Upload mit Spring Boot (keine mehrteilige Datei verwenden)
Verwenden Sie thymeleaf3 mit parent, ohne Spring-Boot-Starter-Parent in Spring Boot anzugeben
Einstellungen für den Spring Boot 2.x-Kontextpfad
Erstellen Sie eine App mit Spring Boot 2
Datenbankverknüpfung mit doma2 (Spring Boot)
Cassandra x Spring Boot Kampfrekord
Spring Boot Programmierung mit VS Code
Bis "Hallo Welt" mit Spring Boot
Erhalten Sie Validierungsergebnisse mit Spring Boot
(Intellij) Hallo Welt mit Spring Boot
Erstellen Sie eine App mit Spring Boot
Google Cloud Platform mit Spring Boot 2.0.0
Verwenden Sie DBUnit für den Spring Boot-Test
Verwendung von ModelMapper (Spring Boot)
Ich habe GraphQL mit Spring Boot ausprobiert
[Java] LINE-Integration mit Spring Boot
Ich habe Flyway mit Spring Boot ausprobiert
Die Nachrichtenkooperation begann mit Spring Boot
Einführung in Spring Boot x Offene API ~ Offene API, erstellt mit Generationslückenmuster ~
Verarbeitung beim Starten einer Anwendung mit Spring Boot
Hallo Welt mit Eclipse + Spring Boot + Maven
Senden Sie regelmäßige Benachrichtigungen mit LineNotify + Spring Boot
Führen Sie einen Transaktionsbestätigungstest mit Spring Boot durch
Versuchen Sie es mit Spring Boot mit VS-Code
Starten Sie die Entwicklung von Webanwendungen mit Spring Boot
Starten Sie die Nginx + Spring Boot-Anwendung mit Docker-Compose
Verwenden Sie die DynamoDB-Abfragemethode mit Spring Boot
Implementieren Sie CRUD mit Spring Boot + Thymeleaf + MySQL
Asynchrone Verarbeitung mit Spring Boot unter Verwendung von @Async
Verwenden Sie Spring Security JSP-Tags mit FreeMarker
Implementieren Sie die Paging-Funktion mit Spring Boot + Thymeleaf
(IntelliJ + gradle) Hallo Welt mit Spring Boot
Formularklassenvalidierungstest mit Spring Boot
Führen Sie die WEB-Anwendung mit Spring Boot + Thymeleaf aus
Erreichen Sie die BASIC-Authentifizierung mit Spring Boot + Spring Security
Erstellen Sie eine Website mit Spring Boot + Gradle (jdk1.8.x)
Konfigurieren Sie die Spring Boot-Anwendung mit dem Maven Multi-Modul
Testen Sie den Controller mit Mock MVC im Spring Boot
Asynchrone Verarbeitung mit regelmäßiger Ausführung in Spring Boot