日期:2014-05-16  浏览次数:20556 次

mongodb实践总结(2)-java driver开发实践

1、mongodb java driver下载

?

??你可以到mongodb官网下载jar包,如果你使用maven管理工程,可以通过以下代码依赖:

?

		<dependency>
		    <groupId>org.mongodb</groupId>
		    <artifactId>mongo-java-driver</artifactId>
		    <version>2.8.0</version>
		</dependency>	 

?

?

2、mongodb java driver驱动不支持事务

?

?? ? ? javaq驱动不支持事务,但可以设置多个写操作在同一次提交中

?? ? ? ? db.requestStart();

                  /*你的业务代码*/
		db.requestDone()
?

?

?

3、mongodb java driver安全连接问题

?

?? 如果你的mongodb连接时需要安全验证,那么在java代码里需要写上

?

?

??? DB db = mongo.getDB(dbname);

		if(!db.isAuthenticated()){
			db.authenticate("username", "password");
		}
 
?

???if(!db.isAuthenticated()){} 判断一定要加上,否则可能会抛异常,重复验证!


4、Mongodb连接池管理

?

?? ? ? mongodb java驱动已经默认实现了一个连接池,java 驱动入口是Mongo类,在整个系统中,这个类建议只有一个实例,即系统只有一个连接池,这个和普通的数据库一样。

?

?

package com.ldl.mongodb;


import java.io.IOException;
import java.net.UnknownHostException;
import java.util.Properties;

import com.mongodb.DB;
import com.mongodb.Mongo;
import com.mongodb.MongoException;
import com.mongodb.MongoURI;

/**
 * mongodb数据库连接管理类
 * @author liu400liu
 *
 */
public class MongodbManager {
	private static MongodbManager dbManager = new MongodbManager();
	private static MongoURI mongoURI;
	private static Mongo mongo ;
	static{
		Properties properties = new Properties();
		try {
			properties.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("config.properties"));
		} catch (IOException e) {
			throw new RuntimeException(e);
		}
		String uri = "mongodb://${mongo.username}:${mongo.password}@${mongo.url}";
		uri = uri.replace("${mongo.url}", properties.getProperty("mongo.url"));
		if("1".equals(properties.getProperty("mongo.auth"))){//连接mongodb数据库是否需要权限1:需要,0不需要
			uri = uri.replace("${mongo.username}", properties.getProperty("mongo.username"))
					 .replace("${mongo.password}", properties.getProperty("mongo.password"));
		}else{
			uri = uri.replace("${mongo.username}:${mongo.password}@", "");
		}
		mongoURI = new MongoURI(uri);
		try {
			mongo = new Mongo(mongoURI);
		} catch (MongoException e) {
			e.printStackTrace();
		} catch (UnknownHostException e) {
			e.printStackTrace();
		}
	}

	private MongodbManager() {
	}
	
	public static MongodbManager getInstance(){
		return dbManager;
	}
	
	//根据数据库名称,获取DB
	public DB getDB(String dbname) throws MongoException, UnknownHostException{
		DB db = mongo.getDB(dbname);
		if(mongoURI.getUsername() != null && !db.isAuthenticated()){
			db.authenticate(mongoURI.getUsername(), mongoURI.getPassword());
		}
		//db.requestStart();
		
		return db;
	}
	
	public DB getDB() throws MongoException, UnknownHostException{
		return getDB(mongoURI.getDatabase());
	}
	
/*	public static void main(String[] args) throws MongoException, UnknownHostException {
		DB db = DbManager.getInstance().getDB("test");
		System.out.println(db.getCollection("blog").findOne().toString());
	}*/
	
}
?


5、mongodb数据库日期字段使用时注意事项

?

?? ? ?在做mongodb查询时,我用日期作为过滤字段,发现一个问题,格式化后的日期传入mongodb会抛异常。比如

?

?

SimpleDateForm