Pertanyaan Redis - Cara mengonfigurasi konversi khusus


Di spring-data-redis, Bagaimana kita perlu mengkonfigurasi konverter khusus yang dapat di-kabel-otomatis / disuntikkan dari aplikasi atau konfigurasi Spring boot.

Saya membaca tentang @ReadingConverter dan @WritingConverter dari dokumentasi redis data pegas. Dari dokumentasi ini, tidak jelas bagaimana cara mengkonfigurasinya. https://github.com/spring-projects/spring-data-redis/blob/master/src/main/asciidoc/reference/redis-repositories.adoc#redis.repositories.indexes

Adakah yang tahu cara melakukannya?


5
2018-03-20 23:05


asal


Jawaban:


Anda harus menyatakan CustomConversions bean bernama "redisCustomConversions" dalam konfigurasi aplikasi Anda.

@Bean
public CustomConversions redisCustomConversions(){
    return new CustomConversions(Arrays.asList(new YourWritingConverter(), new YourReadingConverter()));
}

3
2018-03-22 19:09



Kode ini dapat membantu siapa saja. Terima kasih @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
}

diuji dengan spring-data-redis-1.8.4.RELEASE


0
2017-07-25 12:39



Diuji dengan spring-boot-starter-data-redis: 2.0.4.RELEASE.

Saya menghadapi masalah di mana saya OffsetDateTime sifat-sifat saya @RedisHash entitas tidak disimpan saat menggunakan CrudRepository.

Masalahnya adalah itu Jsr310Converters tidak memiliki konverter OffsetDateTime.

Untuk mengatasi ini, saya membuat konverter membaca:

@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);
    }
}

dan menulis konverter:

@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();
    }
}

Dan terdaftar a RedisCustomConversions kacang dalam konfigurasi:

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));
    }

}


0
2017-09-12 11:14