11.2. 注入嵌入式缓存
设置 CDI Bean 以注入嵌入式缓存。
流程
创建缓存限定符注解。
... import jakarta.inject.Qualifier; @Qualifier @Target({ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface GreetingCache {1 }- 1
- 创建一个
@GreetingCache限定符。
添加定义缓存配置的制作者方法。
... import org.infinispan.configuration.cache.Configuration; import org.infinispan.configuration.cache.ConfigurationBuilder; import org.infinispan.cdi.ConfigureCache; import jakarta.transaction.inject.Produces; public class Config { @ConfigureCache("mygreetingcache")1 @GreetingCache2 @Produces public Configuration greetingCacheConfiguration() { return new ConfigurationBuilder() .memory() .size(1000) .build(); } }如果需要,添加创建集群缓存管理器的制作者方法
... package org.infinispan.configuration.global.GlobalConfigurationBuilder; public class Config { @GreetingCache1 @Produces @ApplicationScoped2 public EmbeddedCacheManager defaultClusteredCacheManager() {3 return new DefaultCacheManager( new GlobalConfigurationBuilder().transport().defaultTransport().build(); } }注意缓存管理器具有重度的权重对象。在应用程序中运行多个缓存管理器可能会降低性能。在注入多个缓存时,可以将每个缓存的限定符添加到 Cache Manager producer 方法中,或者不添加任何限定符。
将
@GreetingCache限定符添加到您的缓存注入点。... import jakarta.inject.Inject; public class GreetingService { @Inject @GreetingCache private Cache<String, String> cache; public String greet(String user) { String cachedValue = cache.get(user); if (cachedValue == null) { cachedValue = "Hello " + user; cache.put(user, cachedValue); } return cachedValue; } }