package com.github.ltsopensource.store.mongo;
import com.github.ltsopensource.core.commons.utils.StringUtils;
import com.github.ltsopensource.core.logger.Logger;
import com.github.ltsopensource.core.logger.LoggerFactory;
import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import java.util.ArrayList;
import java.util.List;
/**
* @author Robert HG (254963746@qq.com) on 8/8/14.
* Mongo 工厂类
*/
public class MongoFactoryBean {
private static final Logger LOGGER = LoggerFactory.getLogger(MongoFactoryBean.class);
private List<ServerAddress> replicaSetSeeds = new ArrayList<ServerAddress>();
private MongoClientOptions mongoClientOptions;
private List<MongoCredential> mongoCredentials = new ArrayList<MongoCredential>();
public MongoFactoryBean(String[] serverAddresses) {
replSeeds(serverAddresses);
}
public MongoFactoryBean(String[] serverAddresses, String username, String database, String pwd) {
this(serverAddresses, MongoCredential.MONGODB_CR_MECHANISM, username, database, pwd);
}
public MongoFactoryBean(String[] serverAddresses, String mechanism, String username, String database, String pwd) {
replSeeds(serverAddresses);
if (StringUtils.isNotEmpty(username)) {
if (MongoCredential.GSSAPI_MECHANISM.equals(mechanism)) {
mongoCredentials.add(MongoCredential.createGSSAPICredential(username));
} else {
mongoCredentials.add(MongoCredential.createMongoCRCredential(username, database, pwd.toCharArray()));
}
}
}
public MongoFactoryBean(String[] serverAddresses, MongoClientOptions mongoClientOptions) {
this(serverAddresses);
this.mongoClientOptions = mongoClientOptions;
}
public MongoClient createInstance() throws Exception {
if (replicaSetSeeds.size() > 0) {
if (mongoClientOptions != null) {
if (mongoCredentials != null) {
return new MongoClient(replicaSetSeeds, mongoCredentials, mongoClientOptions);
} else {
return new MongoClient(replicaSetSeeds, mongoClientOptions);
}
}
if (mongoCredentials != null) {
return new MongoClient(replicaSetSeeds, mongoCredentials);
} else {
return new MongoClient(replicaSetSeeds);
}
}
return new MongoClient();
}
private void replSeeds(String... serverAddresses) {
try {
replicaSetSeeds.clear();
for (String addr : serverAddresses) {
String[] a = addr.split(":");
String host = a[0];
if (a.length > 2) {
throw new IllegalArgumentException("Invalid Server Address : " + addr);
} else if (a.length == 2) {
replicaSetSeeds.add(new ServerAddress(host, Integer.parseInt(a[1])));
} else {
replicaSetSeeds.add(new ServerAddress(host));
}
}
} catch (Exception e) {
LOGGER.error(e.getMessage(), e);
}
}
}