首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

通过Spring data ElasticSearch repo保存到elasticsearch后,LocalTime(00:01:002)变为(24:00:02)

Spring Data Elasticsearch 是 Spring 框架的一个模块,提供了方便的集成和操作 Elasticsearch 的能力。在使用 Spring Data Elasticsearch 的过程中,遇到 LocalTime 类型的数据保存到 Elasticsearch 后,出现了从 "00:01:002" 变为 "24:00:02" 的情况。

这个问题的原因是 Elasticsearch 在处理时间类型字段时,会将 LocalTime 类型的数据默认当作 UTC 时间来处理。而 "00:01:002" 在 UTC 时间中等同于 "24:00:02"。

要解决这个问题,我们可以通过自定义序列化和反序列化器来处理 LocalTime 类型的数据。下面是具体的解决步骤:

  1. 创建一个实现 org.springframework.core.convert.converter.Converter 接口的自定义转换器,用于将 LocalTime 类型的数据转换为 Elasticsearch 中的时间格式。
代码语言:txt
复制
import org.springframework.core.convert.converter.Converter;

import java.time.LocalTime;
import java.time.format.DateTimeFormatter;

public class LocalTimeToStringConverter implements Converter<LocalTime, String> {

    private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("HH:mm:ss.SSS");

    @Override
    public String convert(LocalTime source) {
        return source.format(FORMATTER);
    }
}
  1. 创建一个实现 org.springframework.core.convert.converter.Converter 接口的自定义转换器,用于将 Elasticsearch 中的时间格式转换为 LocalTime 类型的数据。
代码语言:txt
复制
import org.springframework.core.convert.converter.Converter;

import java.time.LocalTime;
import java.time.format.DateTimeFormatter;

public class StringToLocalTimeConverter implements Converter<String, LocalTime> {

    private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("HH:mm:ss.SSS");

    @Override
    public LocalTime convert(String source) {
        return LocalTime.parse(source, FORMATTER);
    }
}
  1. 在 Spring Boot 的配置文件中,配置自定义转换器。
代码语言:txt
复制
spring:
  elasticsearch:
    rest:
      client:
        converters:
          - com.example.converter.LocalTimeToStringConverter
          - com.example.converter.StringToLocalTimeConverter

通过以上步骤,就可以解决 LocalTime 类型在保存到 Elasticsearch 后的时间格式变化问题。

关于 Elasticsearch 的更多信息,您可以参考腾讯云提供的 Elasticsearch 产品介绍

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

mysql数据实时同步到Elasticsearch

工具对源mysql数据库进行一次全量同步,通过elasticsearch client执行操作写入数据到ES;然后实现了一个mysql client,作为slave连接到源mysql,源mysql作为master..." config { file-prefix = "stdout-00" # required if binlog-position-repo is specifiec...\x01\x00\x00\x14webservice\x10building\xcc\x01\x02\x91,\xae\xa3fc\x11\xe8\xa1\xaaRT\x00Z\xf9\xab\x00\...x00\x04\x18BuildingName\x06xxx\x14BuildingId\nId-10\x00\x02\x04Id\xd4%\x00', checksum=128384379, serialized_key_size...,可通过配置不同的策略处理异常 mypipe不能同步存量数据,如果需要同步存量数据可通过其它方式先全量同步,再使用mypipe进行增量同步 mypipe只同步binlog, 需要同步数据到ES需要另行开发

18.9K3530

05 . ELK Stack简介原理及部署应用

是需要在采集日志数据server上安装filebeat,并指定日志目录或日志文件,Filebeat就能读取数据,迅速发送到Logstash进行解析,亦或直接发送到Elasticsearch进行集中式存储和分析...Logstash通过输入插件从多种数据源(比如日志文件,标准输入Stdin等)获取数据,再经过过滤插件加工数据,然后经过Elasticsearch输出插件输出到Elasticsearch通过Kibana...然后 Logstash 通过消息队列输入插件从队列中获取数据,分析过滤经输出插件发送到 Elasticsearch,最后通过 Kibana 展示。见下图 ?.../elk/{data,logs} chown -R elk:elk /data/elk/ # 6.软件包解压、授权 # 上传软件包 通过scp 或者FTP方式上传到/opt...{DATA:log_date} %{TIME:log_localtime2} %{WORD:year_tmp}\: %{WORD:name_2}\: %{WORD:request_leixin} %{WORD

1K50
领券