首页 > 数据库 >Java 代码里如何设置,可以让程序仅仅从 MongoDB 的主节点读写,而不从从节点读写

Java 代码里如何设置,可以让程序仅仅从 MongoDB 的主节点读写,而不从从节点读写

时间:2024-10-21 09:49:16浏览次数:1  
标签:Java ReadPreference MongoDB 读写 primary mongodb 节点 MongoClient

在 Java 中,如果你希望仅从 MongoDB 的主节点(primary node)进行读写操作,而避免从从节点(secondary nodes)读写,可以通过以下方式配置 MongoDB 客户端:

1. 使用 ReadPreference.primary() 配置

MongoDB 提供了 ReadPreference 类来定义客户端的读偏好。默认情况下,ReadPreference.primary() 只会从主节点读取数据。

你可以在创建 MongoDB 客户端时显式指定 ReadPreference.primary(),以确保所有读取操作都发生在主节点上。

代码示例

假设你使用 MongoDB 官方 Java 驱动(mongo-java-driver),代码可以如下配置:

import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
import com.mongodb.MongoClientURI;
import com.mongodb.ReadPreference;
import com.mongodb.ServerAddress;

import java.util.Arrays;

public class MongoDBPrimaryReadExample {
    public static void main(String[] args) {
        // 创建 MongoClientOptions 并设置 ReadPreference 为 primary
        MongoClientOptions options = MongoClientOptions.builder()
                .readPreference(ReadPreference.primary())
                .build();
        
        // 使用自定义的 ServerAddress 连接 MongoDB Replica Set
        MongoClient mongoClient = new MongoClient(new ServerAddress("localhost", 27017), options);
        
        // 或者使用 URI 来创建 MongoClient 并指定 primary read preference
        MongoClientURI uri = new MongoClientURI("mongodb://localhost:27017/?readPreference=primary");
        MongoClient clientWithURI = new MongoClient(uri);

        // 继续使用 mongoClient 进行读写操作,默认会从 primary 节点读取数据
        // Write and read operations here
    }
}

2. URI 连接字符串配置

如果你使用的是 MongoDB URI 连接字符串,可以在连接字符串中指定 readPreference=primary 来确保读取操作仅从主节点执行。例如:

String uri = "mongodb://localhost:27017/?readPreference=primary";
MongoClientURI clientURI = new MongoClientURI(uri);
MongoClient mongoClient = new MongoClient(clientURI);

在该配置下,MongoDB 客户端会在连接到副本集时始终从主节点进行读操作。

3. 副本集环境中的主节点优先

MongoDB 副本集环境的工作机制是,所有的写操作都会被路由到主节点(primary node)。因此,对于写操作,你不需要进行特殊设置,MongoDB 会自动路由到主节点。上述 ReadPreference.primary() 主要用于确保读操作只从主节点进行,而不会从从节点获取可能滞后的数据。

总结

  1. 默认配置:在大多数情况下,MongoDB 自动将写操作路由到主节点,不需要特殊设置。
  2. 读操作:使用 ReadPreference.primary() 来确保所有读取操作只从主节点进行。

你可以根据具体使用的 MongoDB 驱动和 Java 版本选择适合的配置方式。

标签:Java,ReadPreference,MongoDB,读写,primary,mongodb,节点,MongoClient
From: https://www.cnblogs.com/gongchengship/p/18488401

相关文章

  • JavaScript的DOM操作
    元素的继承classStudentextendsPerson{}创建一个Student对象继承自Person对象本身会自带Person的属性并且可以创建属于自己的属性什么是DOM?◼前面我们花了很多时间学习JavaScript的基本语法,但是这些基本语法,但是这些语法好像和做网页没有什么关系,和前面学习的H......
  • JavaScript的事件处理
    认识事件处理◼Web页面需要经常和用户之间进行交互,而交互的过程中我们可能想要捕捉这个交互的过程:比如用户点击了某个按钮、用户在输入框里面输入了某个文本、用户鼠标经过了某个位置;浏览器需要搭建一条JavaScript代码和事件之间的桥梁;当某个事件发生时,让JavaScr......
  • java计算机毕业设计固体垃圾智能(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、研究背景随着城市化进程的加速,固体垃圾的产生量急剧增加,传统的固体垃圾处理方式面临着诸多挑战。例如,在许多城市中,垃圾填埋场逐渐接近饱和,而焚烧处理又可......
  • java计算机毕业设计高校第二课堂管理系统(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、研究背景在高校教育体系中,第二课堂作为课堂教学的延伸和补充,正发挥着日益重要的作用。传统的第二课堂管理往往依赖人工操作,缺乏系统性和高效性。例如,活动......
  • java计算机毕业设计《音悦唯尔》在线音乐播放网站(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、研究背景随着互联网技术的飞速发展,在线音乐播放平台已经成为人们获取音乐资源的主要途径之一。近年来,在线音乐市场规模不断扩大,用户对于音乐的需求也日益......
  • JavaScript递归按条件过滤掉子级数据
    有一个子父级树形结构的数据,现需要递归遍历,找到类型为‘1’的数据,过滤子级,最后返回树形结构数据代码如下//调用方法,返回按要求过滤后的数据constnewArr=this.clearChildrenOfTypeIndex(arr)//定义过滤方法clearChildrenOfTypeIndex(tree){//避免原始数组被直接修改......
  • 手写Java代码生成工具(五)生成service和serviceImpl文件
    目录前言一、创建service文件以及导入所需的类二、生成service类需要的方法三、创建ServiceImpl文件以及生成导入语句四、生成的ServiceImpl类文件中添加内容五、遍历索引,生成基础增删改查前言写博客是为了记录和分享自己的学习,所分享内容是网上的资源,由于非原创项......
  • java常见异常
    NullPointerException(NPE)发生原因:尝试使用一个尚未初始化(即为null)的对象实例。解决方案:确保所有变量在使用前已被正确初始化。ArrayIndexOutOfBoundsException发生原因:访问数组时索引超出数组的范围。解决方案:确保索引值在访问数组之前已经过验证,并且处于有效范围内。......
  • 分享一下java中遇到过的十个异常报错情况
    1.使用lambda表达式时候的闭包问题闭包:在lambda表达式中使用外部变量的时候,会给该变量自动加上final可以看到forEach中的a++处出现报错,因为a定义在了lambda表达式之外,即不在o->{}的大括号中。解决办法:把该变量变成引用数据类型2.算术异常(ArithmeticException)解决办法:......
  • 【Java SE 】继承 与 多态 详解
     ......