En spring-data-redis, ¿cómo necesitamos configurar convertidores personalizados que se puedan conectar/inyectar automáticamente desde la configuración o la aplicación de arranque de Spring?
Leí sobre @ReadingConverter y @WritingConverter en la documentación de Spring Data Redis. A partir de esta documentación, no está claro cómo configurarlos. https://github.com/spring-projects/spring-data-redis/blob/master/src/main/asciidoc/reference/redis-repositories.adoc#redis.repositories.indexes
Alguien sabe como hacerlo?
Probado con spring-boot-starter-data-redis:2.0.4.RELEASE .
Me enfrentaba a un problema en el que mis propiedades OffsetDateTime de mi entidad @RedisHash no se almacenaban al usar CrudRepository .
El problema fue que Jsr310Converters no tiene un convertidor de OffsetDateTime .
Para resolver esto, creé un convertidor de lectura:
@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); } }y convertidor de escritura:
@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(); } } Y registró un bean RedisCustomConversions en la configuración:
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)); } }Debe declarar el bean CustomConversions llamado "redisCustomConversions" en la configuración de su aplicación.
@Bean public CustomConversions redisCustomConversions(){ return new CustomConversions(Arrays.asList(new YourWritingConverter(), new YourReadingConverter())); }Estos códigos pueden ayudar a cualquiera. Gracias @Mikhail
@Component public class RedisObjectHelper { @Resource private RedisTemplate<String, ?> redisTemplate; private HashOperations<String, byte[], byte[]> hashOperations; private HashMapper<Object, byte[], byte[]> mapper; @PostConstruct public void init() { mapper = new ObjectHashMapper(new CustomConversions(Arrays.asList(new Timestamp2ByteConverter(), new Byte2TimestampConverter()))); hashOperations = redisTemplate.opsForHash(); } // and any methods }probado con spring-data-redis-1.8.4.RELEASE