solr快速上手:实现从mysql定时自动同步数据(六)

news/2024/4/20 19:43:13 标签: solr, mysql, 数据库

0. 引言

上一章节我们讲解了从msyql同步数据到solr,但是我们每次同步都需要在solr-admin中点击同步按钮,这在生产环境中肯定是不可行的,那么solr是否支持自动化同步了,答案当然是可以,我们今天继续来探索如何实现solr自动从mysql同步数据

solr快速上手:solr简介及安装(一)
solr快速上手:核心概念及solr-admin界面介绍(二)
solr快速上手:managed-schema标签详解(三)
solr快速上手:创建核心/索引/core(四)
solr快速上手:配置从mysql同步数据(五)

1. 思路

首先我们要知道,我们在solr-admin中实现数据同步,是通过solrdataimport接口来实现的,而solr本身也把该接口暴露给我们了,所以理论上我们只要定时调用对应核心的dataimport接口,即可实现定时增量同步

而调用dataimport接口,只需要通过普通的http请求即可

接口地址:

http://solr服务ip:solr服务端口/solr/核心/dataimport?command=同步类型&commit=true&clean=true

  • command 同步类型支持全量同步full-import和增量同步delta-import
  • clean 是否清除原数据,增量同步时注意设置为false
  • commit 批量同步时,是否每批次提交立即更新solr中数据

我们甚至可以直接访问接口进行同步:

全量同步接口地址:
http://192.168.244.41:8983/solr/orders/dataimport?command=full-import&commit=true&clean=true

在这里插入图片描述

增量同步接口地址:
http://192.168.244.41:8983/solr/orders/dataimport?command=delta-import&commit=true&clean=true

注:这里仅测试,未将clean设置为false,实际使用时不能设置为true,否则原数据会被清楚
在这里插入图片描述

2. 实操

我们之前讲过定时任务框架xxl-job:springcloud:快速上手定时任务框架xxl-job(十五)

那么我们可以基于之前的定时任务项目来实现定时调用同步接口,从而实现自动同步

0、在实现之前,有更加基础的配置,我们在前几章已经讲解过了,如果还不知道的同学,可以先学习一下前几章,这里我们就不再重复讲解了

1、首先基于之前的项目书写一个数据同步的定时任务,其核心处理逻辑就是调用增量同步接口

(项目地址:https://gitee.com/wuhanxue/wu_study/tree/master/demo/xxljob_demo)

@XxlJob("orderSolrImport")
    public void solrImport(){
        HashMap<String, Object> param = new HashMap<>();
        param.put("commit", true);
        param.put("command", "delta-import");
        String result = HttpUtil.get("http://192.168.244.41:8983/solr/orders/dataimport", param);
        System.out.println("同步成功:\n"+result);
    }

如上代码需要引入hutool工具包

        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.8.7</version>
        </dependency>

2、然后在xxl-job管理端配置一个定时任务

在这里插入图片描述

这里我配置的是30s执行一次同步,具体可根据项目情况调整

在这里插入图片描述

3、启动任务之后,先在数据库新增两条数据

在这里插入图片描述

4、之后我们就可以在后台看到同步日志了

在这里插入图片描述
这里如果出现了增量数据再重复更新,这是因为solr安装目录/server/核心/conf/dataimport.properties文件中的增量同步时间不是当前时间导致,它会持续更新递增, 一直更新到当前时间为止,你也可以直接修改其时间为当前时间

orders.last_index_time=2023-06-08 00\:22\:00
last_index_time=2023-06-08 00\:22\:00

5、solr中也能查到刚同步的数据了

在这里插入图片描述

3. 总结

至此我们数据定时同步的简单实现就完成了,当然你也可以选择其他的定时任务框架,或实现方式,但是实现思路是不变的,同时我们这里是通过http直接调用的同步接口,实际上我们引入solr客户端后,还可以使用solr客户端提供的方法来实现,但核心原理依然相同!


http://www.niftyadmin.cn/n/409376.html

相关文章

链表排序(自己鼓捣出一种递归建表)

递归建表 是不是很优雅&#xff01; struct ListNode {int val;ListNode *next;ListNode() : val(0), next(nullptr) {}ListNode(int x) : val(x), next(nullptr) {}ListNode(int x, ListNode *next) : val(x), next(next) {}};ListNode* Create(int n) {if(!n) return NULL…

外观设计模式解读

目录 问题引进 传统方式解决影院管理 外观模式基本介绍 概念 外观模式原理类图 分类外观模式的角色 外观模式解决影院管理 传统方式解决影院管理说明 外观模式应用实例 外观模式的注意事项和细节 s统的内部细节 > 外观模式 外观模式基本介绍 概念 1) 外观模式&…

让我们彻底了解Maven(二)--- Maven私服的搭建

首先我们为什么需要搭建Maven私服&#xff0c;一切技术来源于解决需求&#xff0c;因为我们在实际开发中&#xff0c;当我们研发出来一个公共组件&#xff0c;为了能让别的业务开发组用上&#xff0c;则搭建一个远程仓库很有必要&#xff0c;写完公用组件后&#xff0c;直接发布…

初学者应该怎么学git-下

初学者应该怎么学git-下 Git 文件管理 文件四种状态 ● 版本控制就是对文件的版本控制&#xff0c;在Git 管理中&#xff0c;文件被统一管理&#xff0c;有四个状态 Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到git 库, 不参与版本控制. 通过git add 状态变为Stage…

vue中的计算属性和侦听器

目录 计算属性使用计算属性只读计算属性可写计算属性 计算属性的缓存 侦听器使用侦听器侦听不同的数据源深度侦听直接给 watch() 传入一个响应式对象使用deep 选项&#xff0c;强制转成深层侦听器 立即侦听watchEffect()watch 和 watchEffect的区别 计算属性和侦听器的异同点相…

【webFlux】zipWithIterable()判断是否有空值以及未与iterable 匹配时设置默认值

判断是否有空值 在使用zipWithIterable()方法时&#xff0c;如果Iterable集合为空&#xff0c;那么zipWithIterable()方法会返回一个空的Flux流。如果Flux流为空&#xff0c;那么zipWithIterable()方法也会返回一个空的Flux流。 如果Iterable集合中有null元素&#xff0c;那么…

C++基础(三) —— STL组件

文章目录 一、C STL standard template libaray 标准模板库 1.顺序容器 vector&#xff1a; 底层数据结构&#xff1a;动态开辟的数组 扩容方式&#xff1a;每次以原来空间大小的2倍进行扩容 具体过程&#xff1a; 当需要在 std::vector 中插入元素时&#xff0c;如果当前容量…

网络通信 --- HTTP 协议初识

目录 &#x1f332;一、HTTP 协议是什么 &#x1f333;二、HTTP协议格式 &#x1f9aa;1.抓包工具的使用(以 Fiddler 为例) &#x1f363;2. 抓包工具的原理 (以 Fiddler 为例) &#x1f364;3. 抓包结果 &#x1f365;① HTTP 请求(request) &#x1f96e;②HTTP响应(re…