之前的博文介绍了,MongoDB利用shell命令进行增删改查的的操作。实际上,更常用的是利用mongodb给的一些驱动插件,利用第三方的工具对MongoDB进行数据库的操作,本文就是利用java连接MongoDB数据库
基本的步骤
-
先下载mongodb-java的驱动,maven依赖如下
<!-- mongo java框架jongo --> <dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> <version>3.4.2</version> </dependency>
有必要提一点的是,最新官方文档中,提到
For new applications, the preferred artifact is mongodb-driver-sync; however, the legacy mongo-java-driver uber jar is still available. The uber jar contains: the BSON library, the core library, and the mongodb-driver.
新程序优先选择mongodb-driver-sync,旧的mongo-java-driver 依然可用,超集 jar中包含BSON库,代码库和mongodb的驱动
新的程序jar<dependencies> <dependency> <groupId>org.mongodb</groupId> <artifactId>mongodb-driver-sync</artifactId> <version>3.11.0</version> </dependency> </dependencies>
如果不是maven项目 ,可以直接下载jar包
-
连接mongodb的工具类
import java.util.ArrayList; import java.util.List; import com.mongodb.MongoClient; import com.mongodb.MongoClientOptions; import com.mongodb.MongoCredential; import com.mongodb.ServerAddress; import com.mongodb.WriteConcern; /** * Mongo数据库连接,单例模式(读写分离) * @author leaderhoo * @date 2017/02/24 */ public class MongoUtil { private static MongoClient mongoReadClient; private static MongoClient mongoWriteClient; static { MongoClientOptions.Builder options = new MongoClientOptions.Builder(); options.connectionsPerHost(5000);// 连接池设置为300个连接,默认为100 options.connectTimeout(85000); // 连接超时,推荐>3000毫秒 options.maxWaitTime(15000); // options.socketTimeout(0); // 套接字超时时间,0无限制 options.threadsAllowedToBlockForConnectionMultiplier(10000); // 线程队列数,如果连接线程排满了队列就会抛出“Out of semaphores to get db”错误。 options.writeConcern(WriteConcern.SAFE); //配置数据源 MongoClientOptions myOptions = options.build(); List<ServerAddress> seeds = new ArrayList<ServerAddress>(); List<MongoCredential> credentials = new ArrayList<>(); //读mongo配置 ServerAddress address = new ServerAddress(MyMongonDBConfig.MONGO_READ_URL, MyMongonDBConfig.MONGO_READ_PORT); //地址 + 端口 seeds.add(address); //用户认证,如果mongodb没有开启,可以注释掉 MongoCredential credential = MongoCredential.createCredential(MyMongonDBConfig.MONGO_READ_USER, MyMongonDBConfig.MONGO_READ_DBNAME, MyMongonDBConfig.MONGO_READ_PWD.toCharArray()); credentials.add(credential); mongoReadClient = new MongoClient(seeds, credentials,myOptions); //写mongo配置 address = new ServerAddress(MyMongonDBConfig.MONGO_WRITE_URL, MyMongonDBConfig.MONGO_WRITE_PORT); seeds.add(address); credential = MongoCredential.createCredential(MyMongonDBConfig.MONGO_WRITE_USER, MyMongonDBConfig.MONGO_WRITE_DBNAME, MyMongonDBConfig.MONGO_WRITE_PWD.toCharArray()); credentials.add(credential); mongoWriteClient = new MongoClient(seeds, credentials,myOptions); } //获取读mongo连接 public static MongoClient getMongoReadClient() { return mongoReadClient; } //获取写mongo连接 public static MongoClient getWriteMongoClient() { return mongoWriteClient; } //测试两个是不是一个连接 public static void main(String[] args) { MongoClient read = MongoUtil.mongoReadClient; MongoClient write = MongoUtil.mongoReadClient; } }
上边的代码,就是我在开发者写的一个用于获取MongoDB连接的驱动工具代码,配置项写在mongodb.properties, 利用Properties读取
配置类public class MyMongonDBConfig { //mongo据库数据读源 public static final String MONGO_READ_USER = ReadProperty.getDataBase("MONGO.SLAVE1.USER"); public static final String MONGO_READ_PWD = ReadProperty.getDataBase("MONGO.SLAVE1.PASSWORD"); public static final int MONGO_READ_PORT = Integer.valueOf(ReadProperty.getDataBase("MONGO.SLAVE1.PORT")); public static final String MONGO_READ_DBNAME = ReadProperty.getDataBase("MONGO.SLAVE1.DBNAME"); public static final String MONGO_READ_URL = ReadProperty.getDataBase("MONGO.SLAVE1.URL"); //mongo数据库数据写源 public static final String MONGO_WRITE_USER = ReadProperty.getDataBase("MONGO.MASTER.USER"); public static final String MONGO_WRITE_PWD = ReadProperty.getDataBase("MONGO.MASTER.PASSWORD"); public static final int MONGO_WRITE_PORT = Integer.valueOf(ReadProperty.getDataBase(