0

spring-cloud-gcp-data-spannerGCP Spanner からデータをフェッチするために使用します。私のテーブルの 1 つには、UTC の日時を含む TIMESTAMP 列が含まれています。

Spring Data Cloud Dataには、一部のカスタム型用のデフォルトの Spanner コンバーターが既にいくつかあります。私のエンティティ クラスは、TIMESTAMP ( com.google.cloud.Timestamp) 列を LocalDateTime にマップします。

デフォルトのTIMESTAMP_LOCAL_DATE_TIME_CONVERTERを使用し、ローカル ゾーン (UTC+3) に従って日時を変換します。カスタム コンバーターを追加し、 を使用して指定しましConverterAwareMappingSpannerEntityProcessorたが、カスタム コンバーターは使用されず、コンバーター リストの最後に表示されます (GenericConversionService#converters)。

public class LocalDateTimeReadConverter implements Converter<com.google.cloud.Timestamp, LocalDateTime> {

  @Nullable
  @Override
  public LocalDateTime convert(com.google.cloud.Timestamp timestamp) {
    return Instant
        .ofEpochSecond(timestamp.getSeconds(), timestamp.getNanos())
        .atZone(ZoneId.of("UTC"))
        .toLocalDateTime();
  }
}
  @Bean
  public SpannerEntityProcessor spannerConverter(SpannerMappingContext mappingContext) {
    return new ConverterAwareMappingSpannerEntityProcessor(mappingContext,
        List.of(new LocalDateTimeWriteConverter()),
        List.of(new LocalDateTimeReadConverter()));
  }

DB 値: 2020-06-18T15:55:09.000Z
実際の値: 2020-06-18T18:55:09.000Z
期待値: 2020-06-18T15:55:09.000Z

デフォルトの Spanner コンバーターをオーバーライドするにはどうすればよいですか?

4

1 に答える 1