【工作记录】spider-flow使用插件连接并操作mongodb数据库

前言

前面说过,spider-flow有着非常优秀的插件机制,可以通过插件实现功能的扩展。前面有小伙伴问到mongodb的集成使用,本文就来梳理下spider-flow中使用mongodb插件的过程,其实非常简单。

PS:
spider-flow的作者已经实现了一些常用的插件,如redis、mongo、es、ocr等,开发和使用方式类似,再有其他需要可自行扩展。

使用过程

1. 引入依赖

这里提供两种方式:

  • 一种是通过下载源码,本地编译,在spider-flow-web中引入
<dependency>
    <groupId>org.spiderflow</groupId>
    <artifactId>spider-flow-mongo</artifactId>
</dependency>
  • 另外一种是在spider-flow-web中引入下载编译好的jar包

下载插件jar包并放入根目录下的lib目录下,下载地址: 点击下载插件jar包

引入方式略有差异:

<dependency>
    <groupId>org.spiderflow</groupId>
    <artifactId>spider-flow-mongo</artifactId>
    <version>0.5.0.v20231129</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/lib/spider-flow-mongo-0.5.0.v20231129.jar</systemPath>
</dependency>

另外 需要在build的spring-boot-maven-plugin配置中添加配置:

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <includeSystemScope>true</includeSystemScope>
            </configuration>
        </plugin>
    </plugins>
    <resources>
        <resource>
            <directory>lib</directory>
            <targetPath>/BOOT-INF/lib/</targetPath>
            <includes>
                <include>**/*.jar</include>
            </includes>
        </resource>
    </resources>
</build>

再遇到问题可以先百度,解决不掉的可以留言。

2. spider-flow数据库执行如下sql
SET FOREIGN_KEY_CHECKS=0;
DROP TABLE IF EXISTS `sp_mongo`;
CREATE TABLE `sp_mongo` (
    `id` varchar(32) NOT NULL,
    `name` varchar(64) DEFAULT NULL,
    `alias` varchar(32) DEFAULT NULL,
    `host` varchar(64) DEFAULT NULL,
    `port` int(6) DEFAULT NULL,
    `database` varchar(64) DEFAULT NULL,
    `username` varchar(32) DEFAULT NULL,
    `password` varchar(32) DEFAULT NULL,
    `create_date` datetime DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
3. 准备mongodb数据源

这个步骤是我自己搭建环境测试的步骤,如果已经有对应数据源,本步骤可忽略。

安装docker并执行如下命令:

docker run -it --restart always --net host --name mongo -d mongo

运行完成后使用如下命令查看日志:

docker logs -f mongo --tail 200

启动成功后执行如下命令进入容器:

docker exec -it mongo mongosh

创建collection及用户并完成用户授权

use aa;
db.createUser({user: 'root', pwd: '123456', 
    roles:[{role:"root",db:"admin"}]})

这样就可以使用root用户访问mongodb的aa数据库了。

其他关于mongodb的使用命令可自行百度完成,也欢迎留言讨论。

4. 启动spider-flow应用

正常启动后进入页面,会看到左侧菜单多出了一个Mongodbs数据源的菜单。

5.页面配置及测试
1. 配置数据源并测试通过

数据源配置及测试

2. 新增、查询测试

数据新增
数据查询

6. 插件已提供的部分语法说明
功能语法示例
新增${mongodb.aliasName.collectionName.insert({key : value})}
新增多条${mongodb.aliasName.collectionName.insert([{key : value},{key : value}])}
编辑${mongodb.aliasName.collectionName.update({key : oldValue},{key : newValue})}
编辑多条${mongodb.aliasName.collectionName.updateMany({key : oldValue},{key : newValue})}
删除${mongodb.aliasName.collectionName.remove({key : value})}
查询${mongodb.aliasName.collectionName.find({key : value}).list()}

源码简说

spiderflow的插件机制设计还是非常优秀的,扩展插件也非常容易。

对应文中mongodb插件代码结构如下:

插件结构

图中红色框起来的部分是为了完成mongodb数据源的增删改查操作的

其余的executor和extension结尾的类才是真正完成功能的。

其中MongoFunctionExecutor.java实现了FunctionExecutor接口,完成的是具体连接mongodb和对mongodb数据进行增删改查的方法,而MongoCollectionExtension.java实现了FunctionExtension接口,完成的是对外也就是爬虫页面上使用到的相关方法。

如果查看过其他插件源码的话,可以发现基本插件实现逻辑都是一致的,关键的接口也就是上面提到的FunctionExecutor接口 和 FunctionExtension接口,有兴趣的可以多研究研究源码,

如果有其他插件开发需求,也可以一起讨论完成,欢迎评论区留言。

总结

整体来说,拆件的使用流程还是非常清晰流畅的,引入依赖->添加相关配置->部署、应用、测试。

作为记录的同时也希望能帮助到需要的朋友。

针对以上内容有任何疑问或者建议,欢迎评论区留言讨论。

创作不易,欢迎一键三连。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/208001.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

线程池技术总结

1. 线程池解决了什么问题 线程池是集中管理线程的&#xff0c;以实现线程的重用&#xff0c;降低资源消耗&#xff0c;提高响应速度&#xff0c;提高线程的可管理性等。线程用于执行异步任务&#xff0c;单个的线程既是工作单元也是执行机制&#xff0c;从JDK1.5开始&#xff…

文心一言 VS 讯飞星火 VS chatgpt (147)-- 算法导论12.2 2题

二、用go语言&#xff0c;写出 TREE-MINIMUM 和 TREE-MAXIMUM 的递归版本。 灵捷3.5 。 文心一言&#xff1a; 以下是用 Go 语言编写的树的最大值和最小值的递归版本代码&#xff1a; package main import ( "fmt" ) type TreeNode struct { Val int Le…

哈希表 LeetCode 2661. 找出叠涂元素

2661. 找出叠涂元素 给你一个下标从 0 开始的整数数组 arr 和一个 m x n 的整数 矩阵 mat 。arr 和 mat 都包含范围 [1&#xff0c;m * n] 内的 所有 整数。 从下标 0 开始遍历 arr 中的每个下标 i &#xff0c;并将包含整数 arr[i] 的 mat 单元格涂色。 请你找出 arr 中在 …

LeetCode105.从前序和中序遍历序列构造二叉树

这道题看完题想了几分钟就想到大概的思路了&#xff0c;但是在写的时候有很多细节没注意出了很多问题&#xff0c;然后写了1个多小时&#xff0c;其实这道题挺简单的。 首先&#xff0c;最基本的知识&#xff0c;先序遍历是根左右&#xff0c;中序遍历是左根右&#xff0c;那么…

重磅!GPT-4 API,全面开放使用!

7月7日&#xff0c;OpenAI在官网宣布&#xff0c;GPT-4 API全面开放使用。现所有付费API用户都可直接访问8K上下文的GPT-4&#xff0c;无需任何等待。 预计到7月底之前&#xff0c;OpenAI会向全新的开发人员开放GPT-4 API使用权限。&#xff08;API详细使用说明地址&#xff1…

【AB平台数据建设】从实验平台到数据管道

文章目录 前言1.从AB实验平台聊起(1)AB平台在业务中的发挥那些作用(2)AB平台进行实验工作流介绍 2.实验平台底层数据管道最小MVP解构(1)数据管道数据从哪里来&#xff1f;(2)数据管道的输出数据有哪些&#xff1f; 小结 前言 AB实验平台是一种通过小范围放量&#xff0c;测试不…

安装两个WIN10/WIN11系统到两个盘中,第二个系统依赖原系统盘引导的问题

前段时间折腾装一个双系统&#xff0c;主要两个方面考虑&#xff1a; 1. 原来的系统又许多软件&#xff0c;想着先保留&#xff1b; 2. 系统想安装到一个固态硬盘中&#xff1b; 在安装的过程中遇到了一些问题&#xff0c;这里记录分享一下。 问题1&#xff0c;运行系统自动安装…

深入 C 语言和程序运行原理 实战项目代码在CentOS 7上编译

cat /etc/redhat-release看到操作系统的版本是CentOS Linux release 7.6.1810 (Core)&#xff0c;uname -r可以看到内核版本是3.10.0-957.21.3.el7.x86_64。 安装gtest 参考博客《使用gtest和lcov测试代码覆盖率》 wget https://github.com/google/googletest/archive/refs/…

Android NDK项目创建的时候C++版本选择都有什么区别

Android ndk项目在创建的时候有C版本选择有4个选项&#xff0c;分别是Toolchain default&#xff0c; C11&#xff0c;C14&#xff0c;C17。 C是一种广泛使用的编程语言&#xff0c;它不断地发展和更新&#xff0c;以适应不同的需求和场景。C的语言标准是由国际标准化组织&…

2.qml 3D-View3D类学习

本章我们来学习View3D类。 View3D是用来渲染3D场景并显示在2D平面的类&#xff0c;并且该类可以放在QML2D下继承于Item子类的任何场景中&#xff0c;比如将View3D放在Rectangle中: Rectangle {width: 200 height: 200color: "red"View3D { anchors.fill: parent…

九章量子计算机:引领量子计算的新篇章

九章量子计算机:引领量子计算的新篇章 一、引言 随着科技的飞速发展,量子计算已成为全球科研领域的前沿议题。九章量子计算机作为中国自主研发的量子计算机,具有划时代的意义。本文将深入探讨九章量子计算机的原理、技术特点、应用前景等方面,带领读者领略量子计算的魅力…

什么是OV SSL证书?

OV SSL证书是组织验证SSL证书的缩写&#xff0c;是三个SSL验证级别之一的名称。 OV是指实名类型的SSL证书&#xff0c;这个实名其实只要证明发布者身份就可以签发&#xff0c;无论是个人还是企业都可以进行申请。 SSL证书大家都知道就是用于网站地址的http改成https加密协议的…

gromacs学习及使用(1)

1.Gromacs的使用 2.Gromacs 的第一步_能量最小化 3.分子动力学模拟Gromacs一般使用步骤&#xff08;空蛋白&#xff09; 4.GROMACS优化(没看懂) 5.GROMACS快速入门&#xff08;有好东西&#xff09; GROMACS中文教程 gmx editconf -f xxx -o xxx6.GROMACS运行参数之em.mdp文…

Burp Suite序列之目录扫描

如果你是一名渗透测试爱好者或者专业人士&#xff0c;你一定知道目录扫描是渗透测试中非常重要的一步。通过目录扫描&#xff0c;我们可以发现网站的敏感信息&#xff0c;隐藏的功能&#xff0c;甚至是后台入口。目录扫描可以帮助我们更好地了解目标网站的结构和漏洞。 但是&a…

四大视角看EMC设计:滤波、接地、屏蔽、PCB布局

电磁干扰的主要方式是传导干扰、辐射干扰、共阻抗耦合和感应耦合。对这几种途径产生的干扰我们应采用的相应对策&#xff1a;传导采取滤波&#xff0c;辐射干扰采用屏蔽和接地等措施&#xff0c;就能够大大提高产品的抵抗电磁干扰的能力&#xff0c;也可以有效的降低对外界的电…

Shell循环:for(三)

示例&#xff1a;使用for实现批量主机root密码的修改 一、前提 已完成密钥登录配置&#xff08;ssh-keygen&#xff09;定义主机地址列表并了解远程修改密码的方法 [rootlocalhost ~]# ssh-keygen #设置免密登录[rootlocalhost ~]# ssh-copy-id 192.168.151.151 二、演示…

【趣味JavaScript】一文让你读懂JavaScript原型对象与原型链的继承,探秘属性的查找机制! 《重置版》

&#x1f680; 个人主页 极客小俊 ✍&#x1f3fb; 作者简介&#xff1a;web开发者、设计师、技术分享博主 &#x1f40b; 希望大家多多支持一下, 我们一起学习和进步&#xff01;&#x1f604; &#x1f3c5; 如果文章对你有帮助的话&#xff0c;欢迎评论 &#x1f4ac;点赞&a…

【Linux】第二十三站:缓冲区

文章目录 一、一些奇怪的现象二、用户级缓冲区三、用户级缓冲区刷新问题四、一些其他问题1.缓冲区刷新的时机2.为什么要有这个缓冲区3.这个缓冲区在哪里&#xff1f;4.这个FILE对象属于用户呢&#xff1f;还是操作系统呢&#xff1f;这个缓冲区&#xff0c;是不是用户级的缓冲区…

STM32 自定义UART数据格式(串口通信点亮LED实验)

起始位&#xff1a;0xaa告诉机器我们要开始传输数据了。 校验位&#xff1a;等于前几项数据位的相加。 结束位&#xff1a;结束传输。 自定义UART数据格式&#xff1a; 1》CPU与CPU之间 2》外设与CPU之间 这里举例&#xff0c;利用串口调试助手发送一串数据&#xff0c;…

Java数据结构之《循环队列》题目

一、前言&#xff1a; 这是怀化学院的&#xff1a;Java数据结构中的一道难度中等的一道编程题(此方法为博主自己研究&#xff0c;问题基本解决&#xff0c;若有bug欢迎下方评论提出意见&#xff0c;我会第一时间改进代码&#xff0c;谢谢&#xff01;) 后面其他编程题只要我写完…