11.2. 注入嵌入式缓存


设置 CDI Bean 以注入嵌入式缓存。

流程

  1. 创建缓存限定符注解。

    ...
    import jakarta.inject.Qualifier;
    
    @Qualifier
    @Target({ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    public @interface GreetingCache { 
    1
    
    }
    Copy to Clipboard Toggle word wrap
    1
    创建一个 @GreetingCache 限定符。
  2. 添加定义缓存配置的制作者方法。

    ...
    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
    
        @GreetingCache 
    2
    
        @Produces
        public Configuration greetingCacheConfiguration() {
            return new ConfigurationBuilder()
                        .memory()
                            .size(1000)
                        .build();
        }
    }
    Copy to Clipboard Toggle word wrap
    1
    要注入的缓存的名称。
    2
    添加缓存限定符。
  3. 如果需要,添加创建集群缓存管理器的制作者方法

    ...
    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();
       }
    }
    Copy to Clipboard Toggle word wrap
    1
    添加缓存限定符。
    2
    为应用创建 bean 一次。创建缓存管理器的制作者应始终包含 @ApplicationScoped 注释,以避免创建多个缓存管理器。
    3
    创建新的 DefaultCacheManager 实例,该实例绑定到 @GreetingCache qualifier。
    注意

    缓存管理器具有重度的权重对象。在应用程序中运行多个缓存管理器可能会降低性能。在注入多个缓存时,可以将每个缓存的限定符添加到 Cache Manager producer 方法中,或者不添加任何限定符。

  4. @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;
        }
    }
    Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat