이 콘텐츠는 선택한 언어로 제공되지 않습니다.
Data Grid Spring Boot Starter
Use Data Grid with your Spring Boot project
Abstract
Red Hat Data Grid 링크 복사링크가 클립보드에 복사되었습니다!
Data Grid is a high-performance, distributed in-memory data store.
- Schemaless data structure
- Flexibility to store different objects as key-value pairs.
- Grid-based data storage
- Designed to distribute and replicate data across clusters.
- Elastic scaling
- Dynamically adjust the number of nodes to meet demand without service disruption.
- Data interoperability
- Store, retrieve, and query data in the grid from different endpoints.
Data Grid documentation 링크 복사링크가 클립보드에 복사되었습니다!
Documentation for Data Grid is available on the Red Hat customer portal.
Data Grid downloads 링크 복사링크가 클립보드에 복사되었습니다!
Access the Data Grid Software Downloads on the Red Hat customer portal.
You must have a Red Hat account to access and download Data Grid software.
Making open source more inclusive 링크 복사링크가 클립보드에 복사되었습니다!
Red Hat is committed to replacing problematic language in our code, documentation, and web properties. We are beginning with these four terms: master, slave, blacklist, and whitelist. Because of the enormity of this endeavor, these changes will be implemented gradually over several upcoming releases. For more details, see our CTO Chris Wright’s message.
Chapter 1. Setting up the Spring Boot Starter 링크 복사링크가 클립보드에 복사되었습니다!
Add dependencies for the Data Grid Spring Boot Starter to your project.
Data Grid supports Spring Boot version 2.x and version 3. Be aware that Spring Boot version 3 requires Java 17.
The examples in this document include artifacts for the latest version of Spring Boot. If you want to use Spring Boot 2.x use:
-
infinispan-spring-boot-starter-embedded -
infinispan-spring-boot-starter-remote
1.1. Enforcing Data Grid Versions 링크 복사링크가 클립보드에 복사되었습니다!
This starter uses a high-level API to ensure compatibility between major versions of Data Grid. However you can enforce a specific version of Data Grid with the infinispan-bom module.
Procedure
Add
infinispan-bomto yourpom.xmlfile before the starter dependencies.<properties> <version.infinispan>14.0.21.Final-redhat-00001</version.infinispan> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>org.infinispan</groupId> <artifactId>infinispan-bom</artifactId> <version>${version.infinispan}</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>${version.spring.boot}</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>org.infinispan</groupId> <artifactId>infinispan-spring-boot3-starter</artifactId> </dependency> </dependencies> </dependencyManagement>
The Data Grid Spring Boot starter uses different Spring Boot versions to other projects such as Red Hat OpenShift Application Runtimes. If you want to use a specific Spring Boot version for compatibility with other projects, you must add the correct dependency to your project.
1.2. Adding Dependencies for Usage Modes 링크 복사링크가 클립보드에 복사되었습니다!
Data Grid provides different dependencies for embedded caches and remote caches.
Procedure
-
Add one of the following to your
pom.xmlfile:
Embedded caches
<dependency>
<groupId>org.infinispan</groupId>
<artifactId>infinispan-spring-boot3-starter-embedded</artifactId>
</dependency>
Remote caches
<dependency>
<groupId>org.infinispan</groupId>
<artifactId>infinispan-spring-boot3-starter-remote</artifactId>
</dependency>
Chapter 2. Using Embedded Caches 링크 복사링크가 클립보드에 복사되었습니다!
Embed Data Grid caches directly in your project for in-memory data storage.
2.1. Adding the EmbeddedCacheManager Bean 링크 복사링크가 클립보드에 복사되었습니다!
Configure your application to use embedded caches.
Procedure
-
Add
infinispan-spring-boot3-starter-embeddedto your project’s classpath to enable Embedded mode. Use the Spring
@Autowiredannotation to include anEmbeddedCacheManagerbean in your Java configuration classes, as in the following example:private final EmbeddedCacheManager cacheManager; @Autowired public YourClassName(EmbeddedCacheManager cacheManager) { this.cacheManager = cacheManager; }
You are now ready to use Data Grid caches directly within your application, as in the following example:
cacheManager.getCache("testCache").put("testKey", "testValue");
System.out.println("Received value from cache: " + cacheManager.getCache("testCache").get("testKey"));
2.2. Cache Manager Configuration Beans 링크 복사링크가 클립보드에 복사되었습니다!
You can customize the Cache Manager with the following configuration beans:
-
InfinispanGlobalConfigurer -
InfinispanCacheConfigurer -
Configuration -
InfinispanConfigurationCustomizer -
InfinispanGlobalConfigurationCustomizer
You can create one InfinispanGlobalConfigurer bean only. However you can create multiple configurations with the other beans.
InfinispanCacheConfigurer Bean
@Bean
public InfinispanCacheConfigurer cacheConfigurer() {
return manager -> {
final Configuration ispnConfig = new ConfigurationBuilder()
.clustering()
.cacheMode(CacheMode.LOCAL)
.build();
manager.defineConfiguration("local-sync-config", ispnConfig);
};
}
Configuration Bean
Link the bean name to the cache that it configures, as follows:
@Bean(name = "small-cache")
public org.infinispan.configuration.cache.Configuration smallCache() {
return new ConfigurationBuilder()
.read(baseCache)
.memory().size(1000L)
.memory().evictionType(EvictionType.COUNT)
.build();
}
@Bean(name = "large-cache")
public org.infinispan.configuration.cache.Configuration largeCache() {
return new ConfigurationBuilder()
.read(baseCache)
.memory().size(2000L)
.build();
}
Customizer Beans
@Bean
public InfinispanGlobalConfigurationCustomizer globalCustomizer() {
return builder -> builder.transport().clusterName(CLUSTER_NAME);
}
@Bean
public InfinispanConfigurationCustomizer configurationCustomizer() {
return builder -> builder.memory().evictionType(EvictionType.COUNT);
}
2.3. Enabling Spring Cache Support 링크 복사링크가 클립보드에 복사되었습니다!
With both embedded and remote caches, Data Grid provides an implementation of Spring Cache that you can enable.
Procedure
-
Add the
@EnableCachingannotation to your application.
If the Data Grid starter detects the:
-
EmbeddedCacheManagerbean, it instantiates a newSpringEmbeddedCacheManager. -
RemoteCacheManagerbean, it instantiates a newSpringRemoteCacheManager.
Reference
Chapter 3. Using Remote Caches 링크 복사링크가 클립보드에 복사되었습니다!
Store and retrieve data from remote Data Grid clusters using Hot Rod, a custom TCP binary wire protocol.
3.1. Setting Up the RemoteCacheManager 링크 복사링크가 클립보드에 복사되었습니다!
Configure your application to use remote caches on Data Grid clusters.
-
Provide the addresses where Data Grid Server listens for client connections so the starter can create the
RemoteCacheManagerbean. Use the Spring
@Autowiredannotation to include your own custom Cache Manager class in your application:private final RemoteCacheManager cacheManager; @Autowired public YourClassName(RemoteCacheManager cacheManager) { this.cacheManager = cacheManager; }
3.1.1. Properties Files 링크 복사링크가 클립보드에 복사되었습니다!
You can specify properties in either hotrod-client.properties or application.properties.
Properties can be in both properties files but the starter applies the configuration in hotrod-client.properties first, which means that file takes priority over application.properties.
hotrod-client.properties
Properties in this file take the format of infinispan.client.hotrod.*, for example:
# List Data Grid servers by IP address or hostname at port localhost:11222.
infinispan.client.hotrod.server_list=127.0.0.1:11222
application.properties
Properties in this file take the format of infinispan.remote.*, for example:
# List Data Grid servers by IP address or hostname at port localhost:11222.
infinispan.remote.server-list=127.0.0.1:11222
3.2. Configuring Marshalling 링크 복사링크가 클립보드에 복사되었습니다!
Configure Data Grid to marshall Java objects into binary format so they can be transferred over the wire or stored to disk.
By default Data Grid uses a Java Serialization marshaller, which requires you to add your classes to an allow list. As an alternative you can use ProtoStream, which requires you to annotate your classes and generate a SerializationContextInitializer for custom Java objects.
Procedure
-
Open
hotrod-client.propertiesorapplication.propertiesfor editing. Do one of the following:
Use ProtoStream as the marshaller.
infinispan.client.hotrod.marshaller=org.infinispan.commons.marshall.ProtoStreamMarshallerinfinispan.remote.marshaller=org.infinispan.commons.marshall.ProtoStreamMarshallerAdd your classes to the serialization allow list if you use Java Serialization. You can specify a comma-separated list of fully qualified class names or a regular expression to match classes.
infinispan.client.hotrod.java_serial_allowlist=your_marshalled_beans_package.*infinispan.remote.java-serial-allowlist=your_marshalled_beans_package.*
- Save and close your properties file.
3.3. Cache Manager Configuration Beans 링크 복사링크가 클립보드에 복사되었습니다!
Customize the Cache Manager with the following configuration beans:
-
InfinispanRemoteConfigurer -
Configuration -
InfinispanRemoteCacheCustomizer
You can create one InfinispanRemoteConfigurer bean only. However you can create multiple configurations with the other beans.
InfinispanRemoteConfigurer Bean
@Bean
public InfinispanRemoteConfigurer infinispanRemoteConfigurer() {
return () -> new ConfigurationBuilder()
.addServer()
.host("127.0.0.1")
.port(12345)
.build();
}
Configuration Bean
@Bean
public org.infinispan.client.hotrod.configuration.Configuration customConfiguration() {
new ConfigurationBuilder()
.addServer()
.host("127.0.0.1")
.port(12345)
.build();
}
InfinispanRemoteCacheCustomizer Bean
@Bean
public InfinispanRemoteCacheCustomizer customizer() {
return b -> b.tcpKeepAlive(false);
}
Use the @Ordered annotation to apply customizers in a specific order.
3.4. Enabling Spring Cache Support 링크 복사링크가 클립보드에 복사되었습니다!
With both embedded and remote caches, Data Grid provides an implementation of Spring Cache that you can enable.
Procedure
-
Add the
@EnableCachingannotation to your application.
If the Data Grid starter detects the:
-
EmbeddedCacheManagerbean, it instantiates a newSpringEmbeddedCacheManager. -
RemoteCacheManagerbean, it instantiates a newSpringRemoteCacheManager.
Reference
3.5. Exposing Data Grid Statistics 링크 복사링크가 클립보드에 복사되었습니다!
Data Grid supports the Spring Boot Actuator to expose cache statistics as metrics.
Procedure
Add the following to your
pom.xmlfile:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> <version>${version.spring.boot}</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>${version.spring.boot}</version> </dependency>Activate statistics for the appropriate cache instances, either programmatically or declaratively.
Programmatically
@Bean public InfinispanCacheConfigurer cacheConfigurer() { return cacheManager -> { final org.infinispan.configuration.cache.Configuration config = new ConfigurationBuilder() .jmxStatistics().enable() .build(); cacheManager.defineConfiguration("my-cache", config); }; }Declaratively
<local-cache statistics="true"/>
The Spring Boot Actuator registry binds cache instances when your application starts.
If you create caches dynamically, you should use the CacheMetricsRegistrar bean to bind caches to the Actuator registry, as follows:
@Autowire
CacheMetricsRegistrar cacheMetricsRegistrar;
@Autowire
CacheManager cacheManager;
...
cacheMetricsRegistrar.bindCacheToRegistry(cacheManager.getCache("my-cache"));
Chapter 4. Using Spring Session 링크 복사링크가 클립보드에 복사되었습니다!
4.1. Enabling Spring Session Support 링크 복사링크가 클립보드에 복사되었습니다!
Data Grid Spring Session support is built on SpringRemoteCacheManager and SpringEmbeddedCacheManager. The Data Grid starter produces those beans by default.
Procedure
- Add this starter to your project.
- Add Spring Session to the classpath.
Add the following annotations to your configuration:
-
@EnableCaching -
@EnableInfinispanRemoteHttpSession -
@EnableInfinispanEmbeddedHttpSession
-
Data Grid does not provide a default cache. To use Spring Session, you must first create a Data Grid cache.
Chapter 5. Application Properties 링크 복사링크가 클립보드에 복사되었습니다!
Configure your project with application.properties or application.yaml.
#
# Embedded Properties - Uncomment properties to use them.
#
# Enables embedded capabilities in your application.
# Values are true (default) or false.
#infinispan.embedded.enabled =
# Sets the Spring state machine ID.
#infinispan.embedded.machineId =
# Sets the name of the embedded cluster.
#infinispan.embedded.clusterName =
# Specifies a XML configuration file that takes priority over the global
# configuration bean or any configuration customizer.
#infinispan.embedded.configXml =
#
# Server Properties - Uncomment properties to use them.
#
# Specifies a custom filename for Hot Rod client properties.
#infinispan.remote.clientProperties =
# Enables remote server connections.
# Values are true (default) or false.
#infinispan.remote.enabled =
# Defines a comma-separated list of servers in this format:
# `host1[:port],host2[:port]`.
#infinispan.remote.server-list=
# Sets a timeout value, in milliseconds, for socket connections.
#infinispan.remote.socketTimeout =
# Sets a timeout value for initializing connections with servers.
#infinispan.remote.connectTimeout =
# Sets the maximum number of attempts to connect to servers.
#infinispan.remote.maxRetries =
# Specifies the marshaller to use.
#infinispan.remote.marshaller =
# Adds your classes to the serialization allow list.
#infinispan.remote.java-serial-allowlist=