10.2. 注入嵌入式缓存
设置 CDI Bean 以注入嵌入式缓存。
流程
创建缓存限定注释。
... import javax.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 javax.enterprise.inject.Produces; public class Config { @ConfigureCache("mygreetingcache") 1 @GreetingCache 2 @Produces public Configuration greetingCacheConfiguration() { return new ConfigurationBuilder() .memory() .size(1000) .build(); } }
添加制作者方法,以便在需要时创建集群缓存管理器
... package org.infinispan.configuration.global.GlobalConfigurationBuilder; public class Config { @GreetingCache 1 @Produces @ApplicationScoped 2 public EmbeddedCacheManager defaultClusteredCacheManager() { 3 return new DefaultCacheManager( new GlobalConfigurationBuilder().transport().defaultTransport().build(); } }
注意缓存管理器是重量对象。在应用程序中运行多个缓存管理器可以降低性能。在注入多个缓存时,可以把每个缓存的限定符添加到 Cache Manager producer 方法中,或者不要添加任何限定符。
将
@GreetingCache
限定符添加到您的缓存注入点。... import javax.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; } }