【发布时间】: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 转换器?
【问题讨论】:
-
你看过这些答案了吗?最后一个链接是github上的一个固定线程。 stackoverflow.com/questions/59071133/…stackoverflow.com/questions/59136904/…github.com/spring-cloud/spring-cloud-gcp/pull/2065
-
嗨,@AntonioRamirez!是的,我看过这些主题。他们有点关于另一个。我的问题是在
com.google.cloud.Timestamp和java.time.LocalDateTime之间转换。 Spring Data 已经有一个默认转换器,我需要覆盖它。 -
您是否以正确的顺序设置参数?我的意思是,当使用该方法时?
-
Dmitry S 在Answer 中发帖称“我为这个问题创建了一个修复程序:github.com/spring-cloud/spring-cloud-gcp/pull/2580”
标签: java spring-boot google-cloud-spanner spring-cloud-gcp