今天写代码,满满的都是坑啊。。特此记录一下。
首先说明一下项目环境:Maven + mongodb-java-driver-3.2.2
原来的项目是用mongo 2.x的驱动写的,然后把它升级到3.x。首先有一个很大的变动就是用户名和密码验证这块。
这是获取MongoClient的方法。
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import com.mongodb.MongoClient;
import com.mongodb.MongoClientURI;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
/**
* MongoDBUtils
* @author administration
*
*/
public class DBUtil {
/**
* 有用户名密码的方式连接mongoDB(MongoCredential方式)
* @param mongodbAddr
* @param databaseName
* @return
*/
public static MongoClient getMongoClientByCredent(String mongodbAddr, String databaseName){
MongoClient mongoClient;
Properties p = TDTFile.getProperAddr("db.properties");
String user = p.getProperty("username");
String pswd = p.getProperty("password");
List<ServerAddress> serverAddrList = new ArrayList<ServerAddress>();
ServerAddress serverAddress = new ServerAddress(mongodbAddr);
serverAddrList.add(serverAddress);
List<MongoCredential> credentialList = new ArrayList<MongoCredential>();
MongoCredential credential = MongoCredential.createCredential(user, databaseName, pswd.toCharArray());
credentialList.add(credential);
mongoClient = new MongoClient(serverAddrList, credentialList);
return mongoClient;
}
/**
* 有用户名密码的方式连接mongoDB(URI方式)
* @param mongodbAddr
* @param databaseName
* @return
*/
public static MongoClient getMongoClientByURI(String mongodbAddr, String databaseName){
MongoClient mongoClient;
Properties p = TDTFile.getProperAddr("db.properties");
String user = p.getProperty("username");
String pswd = p.getProperty("password");
//System.out.println(user + "," + pswd);
String uri = String.format("mongodb://%s:%s@%s/%s", user, pswd, mongodbAddr, databaseName);
System.out.println(uri);
MongoClientURI mongoClientURI = new MongoClientURI(uri);
mongoClient = new MongoClient(mongoClientURI);
return mongoClient;
}
}
两种方式都没问题,在eclipse下跑的好好的。但是!!用mvn package打包之后就不能用了,经过一晚上家一白天的分析之后,我把错误的根源锁定在了命令行执行命令的语句上。我的语句是这样的:
java -Djava.ext.dirs=../lib 其他参数
解决方案:
将需要的外部依赖包,包括jdk自带的一些加密算法之类的包,一起用maven打包到lib下。问题解决。顺便说一下,mongodb3.x需要的算法包是:%JAVA_HOME%\jre\lib\ext\sunjce_provider.jar