由于业务需要,最近公司将一部分的数据转移的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 )
检查发现 是由于连接不释放引起的 (
解决的方式:
废弃使用 Mongo 函数 使用MongoClient 问题就解决了
附上 连接时候的 参数介绍:
如果连接线程排满了队列就会抛出“Out of semaphores to get db”错误。
maxWaitTime:最大等待连接的线程阻塞时间
connectTimeout:连接超时的毫秒。0是默认和无限
socketTimeout:socket超时。0是默认和无限
autoConnectRetry:这个控制是否在一个连接时,系统会自动重试