MongoDB_java连接MongoDB

java程序连接单机版的mongodb:

参考:http://www.runoob.com/mongodb/mongodb-java.html

          https://www.yiibai.com/mongodb/mongodb_java.html

Mongodb JDBC驱动程序,下载地址:http://mongodb.github.io/mongo-java-driver/

需要引用的jar包为:mongo-java-driver-3.9.1.jar

需要注意的是,需要将安装的单机的mongodb的配置中bind_ip=0.0.0.0 否则会连接不上,参考https://www.cnblogs.com/lindsay-chh/p/4734568.html

测试代码:

    public static void main(String[] args) {    
        try {        
            @SuppressWarnings("resource")
            MongoClient mongoClient=new MongoClient("10.3.13.213" ,27017);
            MongoDatabase mongoDatabase=mongoClient.getDatabase("yldb");    
            mongoDatabase.createCollection("yyCollection");    
            MongoCollection<Document> collection=mongoDatabase.getCollection("yyCollection");
            Document document=new Document("title","111").append("ttt", 111).append("eee", 111222);
            collection.insertOne(document);        
        } catch (Exception e) {
            // TODO: handle exception
        }

 java连接副本集模式下的MongoDB

在搭建的mongodb环境中,即使有一个节点挂了,也不会影响应用程序客户端对整个副本集的读写。

package test_mongodb;
import java.util.ArrayList;
import org.bson.Document;
import com.mongodb.MongoClient;
import com.mongodb.ServerAddress;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
public class test2 {    
    public static void main(String[] args) {
        java.util.List<ServerAddress> serverAddresses=new ArrayList<>();        
        ServerAddress address1=new ServerAddress("10.3.13.213",27017);
        ServerAddress address2=new ServerAddress("10.3.2.33",27017);
        ServerAddress address3=new ServerAddress("10.3.2.34",27017);
        serverAddresses.add(address1);
        serverAddresses.add(address2);
        serverAddresses.add(address3);
        MongoClient client=new MongoClient(serverAddresses);
        try {
            //连接数据库test
            MongoDatabase mongoDatabase=client.getDatabase("test");
            //连接集合testcc
            MongoCollection<Document> collection=mongoDatabase.getCollection("testcc");
            FindIterable<Document> docs=collection.find();
            //将集合中的文档内容转换成字符串打印出来
            for(Document document:docs){
                String string=document.toString();
                System.out.println(string);
            }        
        } catch (Exception e) {    
            System.out.println(e);
        }
        client.close();
    }
}

 按上面对的部署与连接下,其实所有的读写操作都是在主节点上进行的。

读写分离:

可以设置只在副本节点上进行读,来减轻主节点的读写压力

首先需要设置副本节点的可读(默认副本节点是不可读写的) repset:SECONDARY> db.getMongo().setSlaveOK()

如下:在获取集合时设置

            //连接集合testcc
            ReadPreference readPreference=ReadPreference.secondary();
            MongoCollection<Document> collection=mongoDatabase.getCollection("testcc").withReadPreference(readPreference);

 也可以在连接数据库时设置,方法相类似

其中:ReadPreference的选项可以选择

       primary:默认参数,只从主节点上进行读取操作;

       primaryPreferred:大部分从主节点上读取数据,只有主节点不可用时从secondary节点读取数据。

       secondary:只从secondary节点上进行读取操作,存在的问题是secondary节点的数据会比primary节点数据“旧”。

       secondaryPreferred:优先从secondary节点进行读取操作,secondary节点不可用时从主节点读取数据;

       nearest:不管是主节点、secondary节点,从网络延迟最低的节点上读取数据。

 

参考:https://blog.csdn.net/u013066244/article/details/73835967/

 https://blog.csdn.net/bao0682/article/details/47104973

 

posted @ 2018-11-24 16:49  弱水三千12138  阅读(928)  评论(0编辑  收藏  举报