0
我在我的Cassandra表中有一個時間戳字段,我想映射到Java Instant類型。 寫作時很容易做到這一點。我想添加custom codecs。春季數據自定義編解碼器讀取問題cassandra
@Override
protected ClusterBuilderConfigurer getClusterBuilderConfigurer() {
return clusterBuilder -> {
clusterBuilder.getConfiguration().getCodecRegistry()
.register(InstantCodec.instance,
LocalDateCodec.instance,
LocalTimeCodec.instance);
return clusterBuilder;
};
}
告訴春天不要將我的瞬發轉換爲其他類型。
private enum InstantWriteConverter implements Converter<Instant, Instant> {
INSTANT;
@Override
public Instant convert(Instant source) {
return source;
}
}
這種方式Instant即時傳遞並由InstantCodec處理。
但是,當從Cassandra回讀時,讀取時間戳會映射到Date,我無法更改此行爲。由於這個原因,我需要爲我的實體添加一個特殊的構造函數來將日期轉換爲即時。
我的分析。 解析行數據時,Cassandra performs a look可以找到合適的編解碼器。它不尊重提供的實體構造函數的參數類型,只是簡單地拾取可以處理行數據的第一個編解碼器。在我的情況下,它會選擇時間戳 - >日期編解碼器,因爲它存在於CodecRegistry codecs列表中的時間戳 - >即時編解碼器之前。
任何方式直接將時間戳轉換爲即時?
編輯
試圖註冊的讀寫器,但讀轉換器不習慣。
@WritingConverter
private enum InstantWriteConverter implements Converter<Instant, Long> {
INSTANT;
@Override
public Long convert(Instant source) {
return source.toEpochMilli();
}
}
@ReadingConverter
private enum InstantReadConverter implements Converter<Long, Instant> {
INSTANT;
@Override
public Instant convert(Long source) {
return Instant.ofEpochMilli(source);
}
}
您可以註冊自定義轉換器的元組(讀寫器)讀取'Instant'(見http://docs.spring.io/spring-data/cassandra/docs/current/reference/html/ #cassandra.custom-converters) – mp911de
在讀取操作期間,轉換器沒有得到使用,即時轉換爲java.util.Date,而不是更少。 – Dexter