在 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/