java - Redis - 如何配置自定义转换

标签 java redis spring-data distributed-caching spring-data-redis

在 spring-data-redis 中,我们如何需要配置可以从 Spring boot 应用程序或配置自动连接/注入(inject)的自定义转换器。

我从 spring data redis 文档中读到了关于 @ReadingConverter@WritingConverter 的内容。从该文档中,不清楚如何配置它们。 https://github.com/spring-projects/spring-data-redis/blob/master/src/main/asciidoc/reference/redis-repositories.adoc#redis.repositories.indexes

有人知道怎么做吗?

最佳答案

使用 spring-boot-starter-data-redis:2.0.4.RELEASE 测试。

我遇到了一个问题,在使用 CrudRepository 时,我的 @RedisHash 实体的 OffsetDateTime 属性没有被存储。

问题是 Jsr310Converters 没有 OffsetDateTime 的转换器。

为了解决这个问题,我创建了一个阅读转换器:

@Component
@ReadingConverter
public class BytesToOffsetDateTimeConverter implements Converter<byte[], OffsetDateTime> {
    @Override
    public OffsetDateTime convert(final byte[] source) {
        return OffsetDateTime.parse(new String(source), DateTimeFormatter.ISO_OFFSET_DATE_TIME);
    }
}

和编写转换器:

@Component
@WritingConverter
public class OffsetDateTimeToBytesConverter implements Converter<OffsetDateTime, byte[]> {
    @Override
    public byte[] convert(final OffsetDateTime source) {
        return source.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME).getBytes();
    }
}

并在配置中注册了一个RedisCustomConversions bean:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.core.convert.RedisCustomConversions;
import org.springframework.data.redis.repository.configuration.EnableRedisRepositories;

import java.util.Arrays;

@Configuration
@EnableRedisRepositories
public class RedisConfiguration {

    @Bean
    public RedisCustomConversions redisCustomConversions(OffsetDateTimeToBytesConverter offsetToBytes,
                                                         BytesToOffsetDateTimeConverter bytesToOffset) {
        return new RedisCustomConversions(Arrays.asList(offsetToBytes, bytesToOffset));
    }

}

关于java - Redis - 如何配置自定义转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42915576/

相关文章:

spring-boot - 未找到 CRUD 存储库 bean 异常

java - 使用 LDAP 的 Tomcat 身份验证,只有用户名,没有密码

java - android Button.getWidth() 返回值 0

javascript - Scala + Play + Akka。是否需要 Backbone.js?

transactions - 在 Redis 中,当存在没有关联的 EXEC 或 DISCARD 的 MULTI 时会发生什么?

spring-data-jpa - 如何将 Spring 数据查询记录到 Couchbase 数据库

java - 在cmd中执行后退出bat文件

java - 用于启动 Java Spring Boot 项目的curl命令

java - Spring boot 2 从 Spring boot 1.5 迁移到 redis 问题

java - Solr : Always seeking for a core named "collection1"