springboot基于SpEL实现mongodb动态查询collection

Mybatis-Plus之单表操作和分表查询 分享关于Mybatis-Plus的单表操作和分表查询,代码改造实际落地过程中的一些思考和设计 阅读详情

背景

以往一直在程序中写死的mongodb查询collection,对于频繁改动的mongodb来说,每次更改都要进行代码修改,费时费力还有风险,故而希望使用动态配置的方式来进行collection查询。
以往映射关系如下:
在这里插入图片描述
由于需要动态配置,首先想到将collection信息存储在zookeeper配置中心里(项目组使用zk做配置中心),所以希望使用@Value的形式来获得,但是由于mongdb中Document不支持@Value的相关语法,所以需要使用表达式来动态支持。

SpEL概念

SpEL全称为“Spring Expression Language”,简写为“SpEL”,参考如下spring 官方文档:https://docs.spring.io/spring/docs/3.0.x/reference/expressions.html
基于SpEL实现mongodb动态配置,在网上资料不多,搜索到一篇文章,https://www.jb51.cc/spring/431546.html,下图为资料中内容
在这里插入图片描述

下图为本人项目中所定义的mongodbconfig
在这里插入图片描述
尝试1.将@Document注释更改为如下所示:

@Document(collection="#{@mongodbTableName.getTableName()}")

但是仍然存在问题,发现程序报错,报错信息如下:

org.springframework.expression.spel.SpelEvaluationException: 
EL1057E: No bean resolver registered in the context to resolve access to bean 'mongodbTableName'

分析bean注册原因,经过检查,bean信息正常,并没有问题,所以分析是表达式问题,进而对表达式进行调整。
尝试2.将@Document注释更改为如下所示:

@Document(collection="#{mongodbTableName.getTableName()}")

结果发现又是新的问题,报错如下:

org.springframework.expression.spel.SpelEvaluationException: EL1007E:(pos 0): Property or field ‘mongodbTableName’ cannot be found on null

怀疑可能还是表达式书写问题,继续调整尝试,
尝试3.将@Document注释更改为如下所示:

@Document(collection="@mongodbTableName.getTableName()")

程序成功运行,初步分析,前面@mongodbTableName去获取spring中对应的bean信息,因为在bean中定义了getTableName(),且返回值为String类型,符合collection要求,实现了配置。

开源漏洞深度分析 | CVE-2022-22980 Spring​ Data MongoDB SpEL表达式注入漏洞 阅读详情

相关推荐

CVE-2022-22980 Spring​ Data MongoDB SpEL表达式注入

SpringData是为了提供一个常见的、一致的数据访问模型,也就是说,它的目标就是为了能为所有数据库(包括关系型和非关系型)提供一致的数据操作接口,并且这些接口名非常通俗易懂,让人一看便知。它也是基于Spring框架的,即可以直接使用Spring的IoC和AOP等特性。

qq_32445755的博客 1089

【CTF】【cve_2022_22890】Spring Data MongoDB SpEL表达式注入漏洞

cve_2022_22890漏洞应用 学习下反弹shell

菜菜的成长 1157

[Pytorch案例实践001]手写MNIST数字识别

Pytorch实现手写数字识别,带完整数据集。

2403_83044722的博客 1114

Apache Subversion Use-After-Free漏洞(CVE-2022-24070)

CVE-2022-24070漏洞会造成Apache Subversion下处理请求的 HTTPD 工作进程崩溃,进而导致拒绝服务,目前该漏洞已修复,建议受影响用户更新到安全版本,或下载官方补丁:https://subversion.apache.org/security/CVE-2022-24070-advisory.txt 编号       CVE-2022-24070                      标题 Apache Subversion Use-After-Free漏洞

murphysec的博客 761

Ubuntu 24.04 下 NoMachine 极速安装与远程桌面配置全攻略

本文详细介绍了在Ubuntu 24.04系统下安装和配置NoMachine远程桌面的完整指南。从系统准备、分步安装到性能调优和常见问题解决,帮助用户快速实现低延迟的远程桌面访问。特别适合开发者和IT管理员在Linux环境下高效部署远程工作环境。

moon9的博客 945

基于本地知识库的智能问答系统架构

智能问答系统的核心可以分为4部分。1)知识库构建。2)检索。3)后处理。4)推理。知识库构建:知识库中可以包含多个向量数据库和知识图谱等,核心是怎么建立索引,使得检索时能够将与问题相关的知识给检索出来。检索:从知识库中的多个库或者知识图谱中检索出与问题相关的信息。后处理:从知识库中检索出来的信息可能是冗余的,而且可能不符合我们希望的格式要求,因此,我们需要对这些数据进行过滤,格式化等操作。推理: 基于检索出来的知识进行推理,让输出能够回答用户的问题,目前主要使用大模型进行推理。

qq_44993593的博客 1709

147.【2024Java八股-全网最全-10w字】

eg: 学校、院校、经验、年龄、跳槽频率…基本包括16种常见使用场景: 、数据共享分布式、、全局 ID、计数器、限流、位统计、购物车、用户消息时间线 timeline、、抽奖、点赞、签到、打卡、商品标签、商品筛选、用户关注、推荐模型、排行榜.详细讲解16种使用场景: https://blog.youkuaiyun.com/zxl646801924/article/details/123202381用户使用id进行查询文章的时候,首先会查询redis数据库,如果在redis中命中数据,那么redis就向用户返回查询的结果

qq_69683957的博客 1736

CVE-2017-7921漏洞深度解析:海康设备明文密码泄露原理与七层防御

网络摄像头安全本质上是嵌入式Web服务安全,其核心在于身份认证机制是否健全。CVE-2017-7921并非传统远程执行漏洞,而是因信任错位导致的未授权API暴露——`/Security/users/1`接口绕过Session校验,直接返回admin明文密码。该问题根植于安防设备早期‘物理隔离+前端可控’的设计假设,在P2P、云平台等新场景下全面失效。技术价值在于揭示了轻量级HTTP服务中路径级访问控制缺失的普遍风险;典型应用场景包括ONVIF协议接管、Telnet后门登录及NVR侧横向移动。本文基于DS-2

weixin_33324197的博客 397

SpringBoot整合MongoDB

了解MongoDB MongoDB可以直接使用,采用K-V的形式存储数据; 可以不用指定存储数据的类型,任何数据的类型都是按照k-v的形式存储; 采用的是insert的一次,{保存的数据k-v}; 保存一行数据; 查询时直接放回一条{}的数据; 数据库中的表,又称为集合collection; #下载MongoDB的镜像 在docker中下载镜像 docker pull mongo #启动MongoDB docker run -d --restart=always -p 270.

m0_60213304的博客 1881

RANSAC地面点分割:从原理到C++实战优化

本文深入解析RANSAC算法在点云地面分割中的原理与C++实战优化,涵盖动态迭代次数、自适应阈值等关键技巧,通过并行计算和内存访问优化提升性能,适用于激光雷达点云处理。

weixin_29015051的博客 277

【图像超分】论文精读:Interpreting Super-Resolution Networks with Local Attribution Maps(LAM)

论文题目:Interpreting Super-Resolution Networks with Local Attribution Maps —— 用局部归因图解释超分辨率网络CVPR 2021!必读文章!必须会的可视化手段!很多文章中都会对比LAM!图像超分辨率 (SR) 技术发展迅速,受益于深度网络的发明及其连续突破。然而,众所周知,深度学习和深度神经网络很难解释。SR网络继承了这种神秘的性质,很少有作品试图理解它们。在本文中,我们对 SR 网络进行了归因分析。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 546

SpringBoot从入门到精通教程(三十二)- MybatisPlus框架动态数据源用法(支持多个DB,动态切换数据源)

需求背景 SpringBoot用法:MybatisPlus框架动态数据源用法(支持多个DB,动态切换数据源) 简介 dynamic-datasource-spring-boot-starter 是一个基于springboot的快速集成多数据源的启动器 优势 网上关于动态数据源的切换的文档有很多,核心只有两种: 构建多套环境,优势是方便控制也容易集成一些简单的分布式事务,缺点是非动态...

Think Different 4025

2024年厦门市第31届小学生C++信息学竞赛试题与解析(第一部分选择题1-10)

2024年厦门市第31届小学生C++信息学竞赛试题与解析(第一部分选择题1-10)

汉克老师的博客 105

【手撕 Spring】深入学习 SpEL

SpEL(Spring表达式语言)是Spring框架中的一种表达式语言,用于在运行时计算和评估表达式。它提供了一种灵活和强大的方式来访问和操作对象图、调用方法、进行算术和逻辑运算、访问集合和映射等。SpEL可以在Spring应用程序的各个方面中使用,例如注解、XML配置、动态查询等。

激流丶的博客 5803

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

MongoDB命令以及使用

启动mongo命令: 格式:mongod --mongod --dbpath  ”路径“  --logpath "文件路径名" -logappend(以追加日志方式) --fork(以后台方式开启) 实例: mongod --dbpath data --logpath log/mongod.log-logappend --fork   启动mongo shell 命令

巫巫巫政霖 784

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

自定义注解中使用SpEL表达式,动态获取方法参数或执行方法

获取变量的功能,比较常见的用法是spring中缓存注解的功能。可以动态获取方法中参数的值。如下: 1.2 执行方法 这个例子用过spring security的或者类似的授权框架的可能比较熟悉。如下 这里其实就是通过表达式去执行某个类的hasRole方法,参数为’ROLE_ADMIN’,然后获得返回值再进行后续操作。表达式不仅支持获取属性和执行方法,还支持各种运算符操作,能查到很多其他大神写的。这里就不写了写demo之前先简单介绍一下执行表达式时比较重要的几个类 最后获得的value就是传入的值,这个dem

weixin_42645678的博客 1万+

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Spring Data MongoDB SpEL表达式注入漏洞(CVE-2022-22890)

Spring Data MongoDB 应用程序在使用带有 SpEL 表达式的 @Query 或 @Aggregation-annotated 查询方法时容易受到 SpEL 注入的影响,如果输入未经过过滤,则该表达式包含用于值绑定的查询参数占位符。v3.4.0v3.3.0 to v3.3.41.环境搭建启动环境可以看到如下界面2、环境中默认是没有crul工具,通过命令下载一个curl工具这里尝试DNslog可以看到成功回显在自己服务器上写一个反弹shell脚本,并开启服务 下载文件到tmp目录下服务开启监

Blue的博客 8565

Spring Boot 操作 MongoCollection

查找集合中的所有文档 MongoCollection<Document> collection = mongoTemplate.getCollection(tableName); MongoDatabase saveDb = mongoTemplate.getMongoDbFactory().getDb("BACKUP_".concat(DateUtil.forma...

不会写博客 1210

关于mongodb配置动态collection name 报错 EL1057E

一、问题 关于配置mongodb的collection 配置动态name网上的很多方法,我用了之后总会爆出找不到bean的错误。 Caused by: org.springframework.expression.spel.SpelEvaluationException: EL1057E: No bean resolver registered in the context to resolve access to bean 'personRepositoryCustom' 在网上找了很久...

qq_31277409的博客 820

Spring中Elasticsearch使用Spel动态创建Documet类的Index

1 使用场景 在一些项目中,需要在程序中根据条件,动态生成es的index,达到整理数据的目的。 例如,大数据量的系统日志,需要按天分index,这时就需要动态生成Index。 2 Spel动态生成Index 这里使用spring-data-elasticsearch的ElasticsearchRestTemplate操作es,版本为3.2.0。 <dependency> <groupId>org.springframework.data</groupId> <

dothetrick的博客 1943

SpringBoot操作mongodb

1.快速构建一个项目 选择Web快速构建项目 2.导入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> <scope>test</scope>

qq_45721042的博客 1934

MongoDB:SpringBoot有关@Document(collection = "")与@Document(collation= "")注解的区别

目录 QUESTION:SpringBoot有关@Document(collection = "")与@Document(collation= "")注解的区别? ANSWER: 一、问题原因 二、分析 2.1 Collection @Id @Document @Indexed @CompoundIndex @Field @Transient @DBRef 2...

岁月求索 2万+

MongoDB多条件动态查询

公司业务框架中有需要用到MongoDB数据库进行数据的存储,前端需要在该框架下进行多条件的动态组合查询。如果在之前mysql中该问题非常好实现,那么我们使用的是MongoDB,又该如何实现呢?

王华春_Jason 3642

window下安装mongoDB

mongoDB简介 MongoDB 是由C++语言编写的开源数据库系统。 在高负载的情况下,添加更多的节点,可以保证服务器性能。 MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。 主要特点 MongoDB的提供了一个面向文档存储,操作起来比较简单和容易。你可以在MongoDB记录中设置任何属性的索引 (如:FirstName="Sameer

wangxuewei111的专栏 724

Spring Boot MongoDB 使用MongoTemplate 操作

Spring Boot 集成MongoDB 1、在POM中添加mongoDB支持 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency> <dependency> <groupId>org.sp.

cdszdd 2122
上一篇: spring boot 注解相关学习
下一篇: InfluxDB简单学习
CodersCoder
博客等级 码龄10年 90粉丝 258原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值