对于最新的稳定版本,请使用 Spring Data Redis 4.0.4spring-doc.cadn.net.cn

CDI 集成

仓库接口的实例通常由容器创建,而在使用 Spring Data 时,Spring 是最自然的选择。 Spring 提供了复杂而完善的机制来创建 Bean 实例。 Spring Data Redis 自带一个自定义的 CDI 扩展,允许你在 CDI 环境中使用仓库抽象。 该扩展包含在 JAR 文件中,因此要激活它,只需将 Spring Data Redis 的 JAR 文件放入你的类路径中即可。spring-doc.cadn.net.cn

然后,您可以通过为 RedisConnectionFactoryRedisOperations 实现 CDI Producer 来设置基础设施,如下示例所示:spring-doc.cadn.net.cn

class RedisOperationsProducer {


  @Produces
  RedisConnectionFactory redisConnectionFactory() {

    LettuceConnectionFactory connectionFactory = new LettuceConnectionFactory(new RedisStandaloneConfiguration());
    connectionFactory.afterPropertiesSet();
	connectionFactory.start();

    return connectionFactory;
  }

  void disposeRedisConnectionFactory(@Disposes RedisConnectionFactory redisConnectionFactory) throws Exception {

    if (redisConnectionFactory instanceof DisposableBean) {
      ((DisposableBean) redisConnectionFactory).destroy();
    }
  }

  @Produces
  @ApplicationScoped
  RedisOperations<byte[], byte[]> redisOperationsProducer(RedisConnectionFactory redisConnectionFactory) {

    RedisTemplate<byte[], byte[]> template = new RedisTemplate<byte[], byte[]>();
    template.setConnectionFactory(redisConnectionFactory);
    template.afterPropertiesSet();

    return template;
  }

}

必要的设置可能因您的 JavaEE 环境而异。spring-doc.cadn.net.cn

Spring Data Redis 的 CDI 扩展会将所有可用的仓库识别为 CDI Bean,并在容器请求某个仓库类型的 Bean 时为其创建一个 Spring Data 仓库的代理。 因此,获取 Spring Data 仓库实例只需声明一个 @Injected 属性,如下例所示:spring-doc.cadn.net.cn

class RepositoryClient {

  @Inject
  PersonRepository repository;

  public void businessMethod() {
    List<Person> people = repository.findAll();
  }
}

Redis 仓库需要 RedisKeyValueAdapterRedisKeyValueTemplate 实例。 如果未找到提供的 Bean,这些 Bean 将由 Spring Data CDI 扩展创建和管理。 不过,您可以提供自己的 Bean 来配置 RedisKeyValueAdapterRedisKeyValueTemplate 的特定属性。spring-doc.cadn.net.cn