首页 > 其他分享 >springboot3集成低版本的mongo

springboot3集成低版本的mongo

时间:2024-08-05 09:55:56浏览次数:13  
标签:mongo spring 低版本 springframework springboot3 mongodb org data

随手记

问题背景

当项目确定技术中为springboot3(3.3.1),jdk17,vue3后,风风火火地开搞,当搞的差不多了,要连mongo时,才发现mongo服务版本为3.2.12,版本太低,以至于springboot3无法连接。

maven依赖:

     <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>

  

报错信息:

org.springframework.data.mongodb.UncategorizedMongoDbException: Server at  ip:port reports wire version 4, but this version of the driver requires at least 6 (MongoDB 3.6).

 

研究过程

 springboot3-mongo的集成包。可以分解成以下依赖:

        <dependency>
            <groupId>org.mongodb</groupId>
            <artifactId>mongodb-driver-sync</artifactId>
            <version>5.0.1</version>
        </dependency>
        <dependency>
            <groupId>org.mongodb</groupId>
            <artifactId>bson</artifactId>
            <version>5.0.1</version>
        </dependency>
        <dependency>
            <groupId>org.mongodb</groupId>
            <artifactId>mongodb-driver-core</artifactId>
            <version>5.0.1</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-mongodb</artifactId>
            <version>4.3.1</version>
        </dependency>

尝试单独更换不同版本的驱动,不同版本的核心依赖包,结果都不行,与springboot3-mongo的集成包版本不匹配。最终放弃使用springboot集成的包

 

解决方案

使用单独的java-mongo依赖,引入spring-data依赖,让mongo对象可以给到spring去管理(IOC),一个可以的包集合如下:

 <dependency>
            <groupId>org.mongodb</groupId>
            <artifactId>mongodb-driver-sync</artifactId>
            <version>4.7.2</version>
        </dependency>
        <dependency>
            <groupId>org.mongodb</groupId>
            <artifactId>bson</artifactId>
            <version>4.7.2</version>
        </dependency>
        <dependency>
            <groupId>org.mongodb</groupId>
            <artifactId>mongodb-driver-core</artifactId>
            <version>4.7.2</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-mongodb</artifactId>
            <version>4.0.12</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-commons</artifactId>
            <version>3.0.12</version>
        </dependency>

  

因为不和springboot去做绑定,所以需要自己处理连接mongo的账号密码,例子:MongoConfig.java

package xxxx.config;

import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.core.MongoOperations;
import org.springframework.data.mongodb.core.MongoTemplate;

/**
 * @Description: 自定义一个mongoTemplate,交给springboot管理
 * 文档:https://www.mongodb.com/zh-cn/docs/drivers/java/sync/v4.7/quick-start/
 *      https://docs.spring.io/spring-data/data-mongodb/reference/mongodb/template-collection-management.html
 * @Author hxh
 * @date 2024/8/2 14:30
 */
@Configuration
public class MongoConfig {
    @Value("${spring.data.mongodb.uri}")
    private String mongoUri;

    @Value("${spring.data.mongodb.database}")
    private String mongoDatabase;

    @Bean
    MongoClient mongoClient() {
        return MongoClients.create(mongoUri);
    }

    @Bean
    MongoOperations mongoTemplate(MongoClient mongoClient) {
        return new MongoTemplate(mongoClient, mongoDatabase);
    }

}

  

mongo的实体类对象,可以像springboot集成那样,使用@Document,@Indexed注解,例子:

@Data
@Document(collection = "test_collection")
public class TestMongo{
    @Indexed
    private String testId;

    @Indexed
    private String testIndex;

    private String content;
}

  

用法:因为交给spring管理的是MongoOperations 类型,不是MongoTemplate,所以注入时要注意一下对象类型

    @Autowired
    MongoOperations mongoTemplate;

    find方法:
    Query query = new Query();
    query.addCriteria(Criteria.where("字段名称").is(字段值).and("字段名称").is(字段值));
    mongoTemplate.find(query, 对象.class)

  增删查改和集成springboot的用法一样,不过多赘述。

 

标签:mongo,spring,低版本,springframework,springboot3,mongodb,org,data
From: https://www.cnblogs.com/caihonghai/p/18342664

相关文章

  • Node.js 通过mongose连mongoDB
    直接用的mongoDBAtlas,有免费的云集群可以用,免费的mongoDBAtlasmongose是一个对象文档映射(ODM)库,用来在node.js上和mongoDB交互的。比较详细的介绍见这个:https://www.freecodecamp.org/news/introduction-to-mongoose-for-mongodb-d2a7aa593c57/建立连接这里的path是你的mo......
  • Ubuntu下安装MongoDB 7
    1.sudosed-i's/http:\/\/archive.ubuntu.com/https:\/\/mirrors.ustc.edu.cn/g'/etc/apt/sources.list2.sudoaptupdate&&sudoaptupgrade-y3.sudoaptinstallgnupgwgetapt-transport-httpsca-certificatessoftware-properties-......
  • docker安装mongo
    1、拉取mongodockerpullmongo2、配置mongo路径mkdir-p/data/mongo/logsmkdir-p/data/mongo/datamkdir-p/data/mongo/config#配置mongod.conf#数据库存储路径dbpath=/data/mongo/data#日志文件路径logpath=/data/mongo/logs/mongod.log#监听的端口port=27017#......
  • MongoDB性能调优
    文章目录MongoDB性能调优MongoDB性能不佳原因影响MongoDB性能的因素MongoDB性能监控工具mongostatmongotopProfiler模块db.currentOp()MongoDB性能调优MongoDB性能不佳原因慢查询阻塞等待硬件资源不足1,2通常是因为模型/索引设计不佳导致的排查思路:按1-2-3依次......
  • MongoDB两地三中心集群架构设计、全球多写集群架构设计
    文章目录高级集群架构设计两地三中心集群架构设计容灾级别两地三中心方案:复制集跨中心部署两地三中心部署的考量点两地三中心复制集搭建环境准备整体架构配置域名解析启动5个MongoDB实例初始化复制集配置选举优先级启动持续写脚本(每2秒写一条记录)测试结果总结全球多......
  • MongoDB复制集/集群搭建详解
    文章目录复制集介绍三节点复制集模式Pss模式PSA模式典型三节点复制集环境搭建注意事项搭建配置复制集复制集状态查询复制集常用命令安全认证创建用户创建keyFile文件启动mongod复制集连接方式复制集成员角色属性成员角色配置隐藏节点配置延时节点添加投票节点移除复制......
  • docker中使用mongo命令显示命令未找到
    dockerpsdockerexec-it098e580a70f6bashmongosh是因为Mongodb6.0版本之后命令从mongo改为mongoshmogondb中的一些查找、删除命令:showdbsusexxxshowcollectionsdb.collectionName.find()//查看集合中的所有数据db.collectionName.remove({})//删......
  • SpringCloud示例项目,使用的SpringBoot3.3.2
    先启动nacos:https://www.cnblogs.com/xsj1989/p/18323636特别注意,SpringBoot、SpringCloud、Openfeign等依赖的版本必须相匹配,不然会报各种错。具体版本对应关系看官网。或者看:https://start.spring.io/actuator/info父pom<?xmlversion="1.0"encoding="UTF-8"?><projectxmln......
  • Springboot3集成knife4j,swagger实现在线接口文档
    什么是knife4jknife4j是一个集Swagger2和OpenAPI3为一体的增强解决方案,帮助开发者快速聚合使用OpenAPI规范,快速生成API文档,并且提供一些额外的功能,比如:API文档生成:可以根据Controller和方法上的注解自动生成Markdown格式的API文档在线访问API:可以在knife4j的页面直接访问......
  • mongodb数据迁移mysql
    1、安装MongoDB参考链接https://blog.csdn.net/qq_45664055/article/details/119794071http://bbs.itying.com/topic/5bd675d80e525017c449479d1.1创建repo文件,MongoDB数据库不在yum的官方仓库,通过配置如下文件,可以通过yum下载MongoDBvi/etc/yum.repos.d/mongodb-org-4......