搜索

10.2. 注入嵌入式缓存

download PDF

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

流程

  1. 创建缓存限定注释。

    ...
    import javax.inject.Qualifier;
    
    @Qualifier
    @Target({ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    public @interface GreetingCache { 1
    }
    1
    创建 @GreetingCache 限定符。
  2. 添加用于定义缓存配置的制作者方法。

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

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

  4. @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;
        }
    }
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.