[JAVA] Utiliser le cache avec EhCashe 2.x avec Spring Boot

Contexte

J'utilisais Spring Boot et je voulais implémenter un cache, alors je l'ai essayé.

Environnement d'exécution

Cache dans Spring Boot

Plusieurs caches sont disponibles dans Spring Boot. https://docs.spring.io/spring-boot/docs/2.1.6.RELEASE/reference/html/boot-features-caching.html

En regardant d'en haut, EhCache 2.x semble être facile à installer. On dit que s'il y a ehcache.xml dans le chemin de classe, il sera utilisé, donc cela semble facile à introduire, donc je vais l'essayer.

EhCache 2.x

la mise en oeuvre

Appelant d'une méthode qui utilise le cache

Cette fois, appelons-le à partir de la classe annotée avec @ SpringBootApplication. Annoter @ 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("Être mis en cache");
		this.getValue("Être mis en cache");//Être mis en cache
		this.getValue("Non mis en cache car les arguments sont différents");//Non mis en cache car les arguments sont différents
		this.getValue("Être mis en cache");//引数違うのを挟んでÊtre mis en cache
		try {
			Thread.sleep(3000L);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		this.getValue("Être mis en cache");//L'argument est le même, mais il n'est pas mis en cache car il a dépassé le temps de survie
	}

	public void getValue(String key){
		logger.info(key + " Start at: " + LocalDateTime.now().format(dateTimeFormatter));
		String ret = cache.getFromCache(key); //Méthode compatible avec le cache
		logger.info(ret + " End at: " + LocalDateTime.now().format(dateTimeFormatter));
	}
}

Classes qui utilisent le cache

Ajoutez @ Cacheable à la méthode pour laquelle vous souhaitez activer la mise en cache

Cache.java


@Component
public class Cache {

    @Cacheable("getCache") //Activer la mise en cache pour cette méthode
    public String getFromCache(String key){
        try {
            Thread.sleep(3000L);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return "End getFromCache:" + key;
    }
}

pom.xml Ajoutez deux systèmes, spring-boot-starter-cache et ʻehcache`, à pom.xml.

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 Créez ehcache.xml sous src / main / resources /. Définissez timeToLiveSeconds sur 5 et définissez la durée de vie du cache sur 5 secondes.

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 Ajoutez les paramètres suivants à application.properties pour utiliser ehcache. Cela n'est pas nécessaire si le seul cache disponible est ehcache.

spring.cache.type=ehcache

Courir

Je le ferai. Le résultat de l'exécution est comme ça.

2020-02-29 21:29:48 -Mise en cache à partir de: 21:29:48
2020-02-29 21:29:51 - End getFromCache:Fin en cache à: 21:29:51
2020-02-29 21:29:51 -Mise en cache à partir de: 21:29:51
2020-02-29 21:29:51 - End getFromCache:Fin en cache à: 21:29:51
2020-02-29 21:29:51 -Non mis en cache car les arguments sont différents Commencer à: 21:29:51
2020-02-29 21:29:54 - End getFromCache:Non mis en cache car les arguments sont différents Fin à: 21:29:54
2020-02-29 21:29:54 -Mise en cache à partir de: 21:29:54
2020-02-29 21:29:54 - End getFromCache:Fin en cache à: 21:29:54
2020-02-29 21:29:57 -Mise en cache à partir de: 21:29:57
2020-02-29 21:30:00 - End getFromCache:Fin en cache à: 21:30:00

Nous verrons les résultats ci-dessous. La première fois, cela prend 3 secondes, mais la deuxième fois est un moment, donc le cache semble fonctionner.

2020-02-29 21:29:48 -Mise en cache à partir de: 21:29:48
2020-02-29 21:29:51 - End getFromCache:Fin en cache à: 21:29:51
2020-02-29 21:29:51 -Mise en cache à partir de: 21:29:51
2020-02-29 21:29:51 - End getFromCache:Fin en cache à: 21:29:51

Si vous passez un argument différent, il ne sera pas mis en cache, donc cela prendra encore 3 secondes.

2020-02-29 21:29:51 -Non mis en cache car les arguments sont différents Commencer à: 21:29:51
2020-02-29 21:29:54 - End getFromCache:Non mis en cache car les arguments sont différents Fin à: 21:29:54

Les éléments suivants représentent plus de 5 secondes de temps de survie, ils ne sont donc pas mis en cache et prennent 3 secondes.

2020-02-29 21:29:57 -Mise en cache à partir de: 21:29:57
2020-02-29 21:30:00 - End getFromCache:Fin en cache à: 21:30:00

Le cache se comporte comme prévu.

Impressions

Je pensais que SpringBoot et EhCache2.X sont rapides car le cache ne peut être implémenté qu'avec des annotations et des fichiers de configuration. Cependant, après avoir appris que la série EhCache3 est déjà disponible, vous n'oserez peut-être pas utiliser la série EhCache2.

Quand j'ai essayé la caféine, j'ai pu implémenter le cache de la même manière, donc il semble que je puisse aussi l'utiliser. L'article suivant a été utile. https://qiita.com/yut_arrows/items/4b664acdfa852c0bd6cd

Recommended Posts

Utiliser le cache avec EhCashe 2.x avec Spring Boot
À partir de Spring Boot 0. Utilisez Spring CLI
Télécharger avec Spring Boot
Comment utiliser MyBatis2 (iBatis) avec Spring Boot 1.4 (Spring 4)
Comment utiliser h2db intégré avec Spring Boot
Utiliser le filtre de servlet avec Spring Boot [compatible Spring Boot 1.x, 2.x]
Générer un code à barres avec Spring Boot
Hello World avec Spring Boot
Implémenter GraphQL avec Spring Boot
Démarrez avec Spring Boot
Exécutez LIFF avec Spring Boot
Connexion SNS avec Spring Boot
Téléchargement de fichiers avec Spring Boot
Spring Boot commençant par copie
Spring Boot + Springfox springfox-boot-starter 3.0.0 Utilisation
Hello World avec Spring Boot
Premiers pas avec Spring Boot
Créer un micro service avec Spring Boot
Envoyer du courrier avec Spring Boot
Téléchargement de fichiers avec Spring Boot (ne pas utiliser de fichier en plusieurs parties)
Utilisez thymeleaf3 avec le parent sans spécifier spring-boot-starter-parent dans Spring Boot
Paramètres du chemin de contexte Spring Boot 2.x
Créez une application avec Spring Boot 2
Liaison de base de données avec doma2 (Spring boot)
Record de lutte pour Cassandra x Spring Boot
Programmation Spring Boot avec VS Code
Jusqu'à "Hello World" avec Spring Boot
Obtenez des résultats de validation avec Spring Boot
(Intellij) Hello World avec Spring Boot
Créez une application avec Spring Boot
Google Cloud Platform avec Spring Boot 2.0.0
Utiliser DBUnit pour le test Spring Boot
Comment utiliser ModelMapper (Spring boot)
J'ai essayé GraphQL avec Spring Boot
[Java] Intégration LINE avec Spring Boot
J'ai essayé Flyway avec Spring Boot
La coopération des messages a commencé avec Spring Boot
Introduction à Spring Boot x Open API ~ Open API créée avec le modèle d'écart de génération ~
Traitement lors du démarrage d'une application avec Spring Boot
Hello World avec Eclipse + Spring Boot + Maven
Envoyez des notifications régulières avec LineNotify + Spring Boot
Effectuer un test de confirmation de transaction avec Spring Boot
Essayez d'utiliser Spring Boot avec VS Code
Démarrez le développement d'applications Web avec Spring Boot
Lancez l'application Nginx + Spring Boot avec docker-compose
Utiliser la méthode de requête DynamoDB avec Spring Boot
Implémenter CRUD avec Spring Boot + Thymeleaf + MySQL
Traitement asynchrone avec Spring Boot en utilisant @Async
Utiliser les balises JSP Spring Security avec FreeMarker
Implémenter la fonction de pagination avec Spring Boot + Thymeleaf
(IntelliJ + gradle) Hello World avec Spring Boot
Test de validation de classe de formulaire avec Spring Boot
Exécutez l'application WEB avec Spring Boot + Thymeleaf
Obtenez une authentification BASIC avec Spring Boot + Spring Security
Créez un site Web avec Spring Boot + Gradle (jdk1.8.x)
Configurer l'application Spring Boot avec le module multiple maven
Testez le contrôleur avec Mock MVC dans Spring Boot
Traitement asynchrone avec exécution régulière dans Spring Boot