Spring Boot es un proyecto construido sobre Spring Framework que proporciona una manera más fácil y rápida de instalar, configurar y ejecutar aplicaciones simples y basadas en la web. Es un marco basado en microservicios que se utiliza para crear una aplicación independiente basada en Spring que podemos ejecutar con configuraciones mínimas de Spring.
Spring Framework proporciona soporte para agregar almacenamiento en caché de forma transparente a una aplicación. Mantiene los objetos, las imágenes y los datos a los que se accede con frecuencia más cerca de donde los necesita, lo que acelera el acceso al no acceder a la base de datos ni a ninguna aplicación de terceros varias veces para obtener los mismos datos y ahorrar costos monetarios. Los datos que no cambian con frecuencia se pueden almacenar en caché.
En Spring Boot, el proveedor de caché otorga autorización a los programadores para configurar el caché explícitamente en una aplicación. Incorpora varios proveedores de caché como EhCache, Redis, Guava, Caffeine , etc.
Para agregar el almacenamiento en caché a una operación de su aplicación, necesitamos agregar la anotación @Cacheable a su método
// Annotation @Component // Class public class Student { // Annotation @Cacheable("Names") // Method public int getName(String name) {} }
Ahora, antes de invocar el método getName() , la abstracción busca una entrada en el caché de nombres que coincida con el argumento del nombre . Si se encuentra una entrada, el contenido de la memoria caché se devuelve inmediatamente a la persona que llama y no se invoca el método. De lo contrario, se invoca el método y la memoria caché se actualiza antes de devolver el valor.
Configuración automática: Spring Boot Framework facilita y reduce las complejidades al implementar soporte de configuración automática en el almacenamiento en caché. Busca las bibliotecas y los archivos de configuración en el classpath e inicializa los beans de dependencia necesarios en el momento del inicio de la aplicación. Spring Boot configura automáticamente la infraestructura de caché siempre que el almacenamiento en caché esté habilitado a través de la anotación @EnableCaching .
Si no agregamos ninguna biblioteca de caché específica, Spring Boot configura automáticamente un proveedor simple que usa mapas concurrentes en la memoria, pero no se recomienda realmente para el uso de producción.
Proveedores de caché de Spring Boot
La abstracción de caché no proporciona un almacenamiento real y se basa en la abstracción materializada por las interfaces org.springframework.cache.Cache y org.springframework.cache.CacheManager . Si no hemos definido un bean de tipo CacheManager o un CacheResolver llamado cacheResolver , Spring Boot intenta detectar los siguientes proveedores:
- Genérico
- JCache (JSR-107)
- EhCache 2.x
- avellana
- Guayaba
- Infinispan
- base de sofá
- redis
- Cafeína
- Simple
Para agregar rápidamente dependencias básicas de almacenamiento en caché, debemos usar spring-boot-starter-cache en el archivo pom.xml. Si queremos agregar dependencias manualmente, debemos incluir spring-context-support en nuestro archivo pom.xml para usar el soporte de JCache, EhCache 2.x o Guava .
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>5.2.3.RELEASE</version> </dependency>
Proveedor 1: Genérico
El almacenamiento en caché genérico se utiliza en el contexto que define al menos un bean org.springframework.cache.Cache . Se crea un CacheManager que envuelve todos los beans de ese tipo.
Proveedor 2: JCache
JCache comienza con la presencia de un javax.cache.spi.CachingProvider en el classpath y el JCacheCacheManager lo proporciona el Spring-boot-starter-cache «Starter». Puede suceder que esté presente más de un proveedor, en cuyo caso el proveedor debe especificarse explícitamente. Incluso si el estándar JSR-107 no impone una forma estandarizada de definir la ubicación del archivo de configuración, Spring Boot se adapta a la configuración de un caché con detalles de implementación, como se muestra en la siguiente ilustración:
Ilustración:
# Only necessary if more than one provider is present spring.cache.jcache.provider=com.acme.MyCachingProvider spring.cache.jcache.config=classpath:acme.xml
Si la biblioteca de caché proporciona implementación nativa y compatibilidad con JSR , Spring Boot prefiere la compatibilidad con JSR .
Proveedor 3: EhCache 2.x
Ehcache 2.x es un caché de código abierto basado en estándares que aumenta el rendimiento, descarga su base de datos y simplifica la escalabilidad. Es el caché basado en Java más utilizado porque es robusto, probado, completo y se integra con otras bibliotecas y marcos populares. EhCache 2.x se usa si se puede encontrar un archivo llamado ehcache.xml en la raíz de classpath. Si se encuentra EhCache 2.x, el EhCacheCacheManager proporcionado por Spring-boot-starter-cache «Starter» se usa para iniciar el administrador de caché. Se escala desde el almacenamiento en caché en proceso, hasta implementaciones mixtas en proceso/fuera de proceso con cachés de tamaño de terabyte. Podemos configurar EhCache usando la siguiente propiedad:
spring.cache.ehcache.config=classpath:config/demo-config.xml
Proveedor 4: Hazelcast
Hazelcast es en realidad una plataforma de aplicaciones de transmisión y memoria para cargas de trabajo rápidas, con estado y con uso intensivo de datos en las instalaciones, en el perímetro o como un servicio en la nube totalmente administrado. Spring Boot tiene soporte general para Hazelcast . Si HazelcastInstance se configuró automáticamente, se envuelve automáticamente en un CacheManager a menos que se especifique la propiedad spring.cache.jcache.config . Podemos configurar Hazelcast usando la siguiente propiedad:
spring.hazelcast.config=classpath:config/demo-hazelcast.xml
Proveedor 5: Guayaba
Guava es un conjunto de bibliotecas Java centrales de Google que incluye nuevos tipos de colección (como multimap y multiset), colecciones inmutables, una biblioteca de gráficos y utilidades para concurrencia, E/S, hash, almacenamiento en caché, primitivos, strings y más. Guava es un solo JAR que proporciona caché entre muchas otras capacidades. Podemos configurar el archivo applicationConfig.xml por:
<bean id="cacheManager" class="org.springframework.cache.guava.GuavaCacheManager"/>
Proveedor 6: Infinispan
Infinispan es una cuadrícula de datos en memoria de código abierto que ofrece opciones de implementación flexibles y capacidades sólidas para almacenar, administrar y procesar datos. Se puede integrar fácilmente con JCache, JPA Quarkus, Spring, etc. Proporciona un almacén de datos clave/valor que puede contener todo tipo de datos, desde objetos Java hasta texto sin formato. Infinispan no tiene una ubicación de archivo de configuración predeterminada, por lo que debe especificarse explícitamente. De lo contrario, se utiliza el programa de arranque predeterminado.
spring.cache.infinispan.config=infinispan.xml
Proveedor 7: base de sofá
CouchbaseCacheManager se configura automáticamente si Couchbase y la implementación de couchbase-spring-cache están disponibles y configuradas. Podemos crear cachés adicionales al inicio configurando la propiedad spring.cache.cache-names . Estos cachés operan en el depósito que se configuró automáticamente. También podemos crear cachés adicionales en otro depósito utilizando el personalizador. Podemos crear los dos cachés en un Cubo con configuración, de la siguiente manera:
spring.cache.cache-names=cache1,cache2
Proveedor 8: Redis
RedisCacheManager se configura automáticamente si Redis está disponible y configurado. Podemos crear cachés adicionales al inicio configurando la propiedad spring.cache.cache-names y los valores predeterminados de caché se pueden configurar usando la propiedad spring.cache.redis.* .
La siguiente configuración crea dos cachés llamados cache1 y cache2, que duran 1 minuto.
spring.cache.cache-names=cache1,cache2 spring.cache.redis.time-to-live=60000
Proveedor 9: Cafeína
CaffeineCacheManager (proporcionado por Spring-Boot-Starter-Cache «Starter») se configura automáticamente si Caffeine está presente y configurado. La cafeína reemplaza el apoyo a la guayaba. Los cachés se pueden crear al inicio configurando la propiedad spring.cache.cache-names .
La siguiente configuración crea cachés cache1 y cache2 con un tamaño máximo de 100 y un tiempo de vida de 1 minuto:
spring.cache.cache-names=cache1,cache2 spring.cache.caffeine.spec=maximumSize=100,expireAfterAccess=60s
Proveedor 10: Sencillo
Si no se menciona ninguno de los otros proveedores, se configura una implementación simple usando un ConcurrentHashMap como almacenamiento en caché. se usará solo si no hay una biblioteca de caché en la aplicación. Podemos restringir la lista de cachés disponibles configurando la propiedad cache-names . Si solo queremos cachés cache1 y cache2, configure la propiedad cache-names de la siguiente manera:
spring.cache.cache-names=cache1,cache2