JAVA连接MongoDB实践(1)


由于业务需要,最近公司将一部分的数据转移的MongoDB数据库中。  

        在配合公司DBA 将 Mongodb数据库部署完毕以后,开始了我们的JAVA连接MongoDB的实践

        

开始前,推荐两个连接数据库的IDE工具

1.rockmongo-on-windows-v0.0.2  (只在火狐浏览器中运行成功)

2. Robomongo (在32机 XP 系统会启动不了)

    

 MongoManager 函数  (实现Mongo 的单例模式)

 public class MongoManager {
	private static final Logger LOGGER = Logger.getLogger(MongoManager.class);
	private static Mongo mongo = null;
	private MongoManager() {
	}
	public static DB getDB(String dbName) {
		try {
			if (mongo == null) {
				init();
			}
		} catch (Exception e) {
			LOGGER.error(e.getMessage(), e);
		}
		return mongo.getDB(dbName);
	}

	private static  void init() {
		try {
			MongoClient client = new MongoClient();
            mongo = MongoClient.connect(127.0.0.1, 27017)).getMongo();
            MongoOptions options = mongo.getMongoOptions();
			options.socketTimeout = 20000;
			options.maxWaitTime = 20000;
			options.connectTimeout = 20000;
		} catch (Exception e) {
			LOGGER.error(e.getMessage(), e);
		}
	}
	

  在使用的过程中 如果大量的数据插入;每次万条数据, 千万级的数据量  经常会报连接异常(连接超时,找不到对应的db )

检查发现 是由于连接不释放引起的  (

 db.serverStatus().connections; 

   解决的方式:

废弃使用 Mongo 函数   使用MongoClient  问题就解决了


   附上 连接时候的 参数介绍:

如果连接线程排满了队列就会抛出“Out of semaphores to get db”错误。

maxWaitTime:最大等待连接的线程阻塞时间

connectTimeout:连接超时的毫秒。0是默认和无限

socketTimeout:socket超时。0是默认和无限

autoConnectRetry:这个控制是否在一个连接时,系统会自动重试



 


   


  





你可能感兴趣的:(JAVA连接MongoDB实践(1))