【问题标题】:如何覆盖 Spring Cloud GCP 中的默认 Spanner 转换器之一
【发布时间】:2020-10-13 19:17:39
【问题描述】:

我使用spring-cloud-gcp-data-spanner 从 GCP Spanner 获取数据。我的一张表包含 TIMESTAMP 列,其中包含 UTC 的日期时间。

Spring Data Cloud Data 已经有一些自定义类型的some default Spanner converters。我的实体类将 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()));
  }

数据库值: 2020-06-18T15:55:09.000Z
实际值: 2020-06-18T18:55:09.000Z
预期值: 2020-06-18T15:55:09.000Z

如何覆盖默认的 Spanner 转换器?

【问题讨论】:

标签: java spring-boot google-cloud-spanner spring-cloud-gcp


【解决方案1】:

这已由https://github.com/spring-cloud/spring-cloud-gcp/pull/2580 解决,这是Dmitry S 所做的修复,正如他们在deleted answer 中提到的那样。

【讨论】:

  • 如果我能够说服某人取消删除原始答案,您会乐意接受那个答案并删除您的这个答案吗?
猜你喜欢
  • 2017-01-26
  • 2013-02-25
  • 2016-05-07
  • 1970-01-01
  • 2014-09-15
  • 2022-08-19
  • 2015-12-27
  • 1970-01-01
  • 2016-06-06
相关资源
最近更新 更多