나는 스프링 데이터를 사용하고 동일한 문제에 반대했다. 스프링 데이터를 사용하여 나는 몽고 객체를 직접 생성 할 수 있었고이를 생성자 매개 변수로 전달했습니다. 모르 피아도 같은 메커니즘을 가지고 있습니다. 키는 다음과 같습니다.
options.socketFactory = SSLSocketFactory.getDefault();
그런 다음 SSL 키를 키 저장소에 설치하면 제대로 작동합니다.
public class MongoFactory {
public Mongo buildMongo (String replicaSet, boolean slaveOk, int writeNumber , int connectionsPerHost, boolean useSSL) throws UnknownHostException{
ServerAddress addr = new ServerAddress();
List<ServerAddress> addresses = new ArrayList<ServerAddress>();
int port =0;
String host = new String();
if (replicaSet == null)
throw new UnknownHostException("Please provide hostname");
replicaSet = replicaSet.trim();
if (replicaSet.length() == 0)
throw new UnknownHostException("Please provide hostname");
StringTokenizer tokens = new StringTokenizer(replicaSet, ",");
while(tokens.hasMoreTokens()){
String token = tokens.nextToken();
int idx = token.indexOf(":");
if (idx > 0){
port = Integer.parseInt(token.substring(idx + 1));
host = token.substring(0 , idx).trim();
}
addr = new ServerAddress(host.trim(), port);
addresses.add(addr);
}
MongoOptions options = new MongoOptions();
options.autoConnectRetry = true;
if (useSSL){
options.socketFactory = SSLSocketFactory.getDefault();
}
options.connectionsPerHost=connectionsPerHost;
options.w=writeNumber;
options.fsync=false;
options.wtimeout=5000;
options.connectTimeout=5000;
options.autoConnectRetry=true;
options.socketKeepAlive=true;
Mongo m = new Mongo(addresses, options);
if(slaveOk){
m.setReadPreference(ReadPreference.SECONDARY);
}
return m;
}
}