我正在使用MongoDB compile "org.grails.plugins:mongodb:3.0.1"
。目前,当我杀死MongoDB主实例时,自动故障转移仅适用于第一次。在这种情况下,辅助节点成为主节点,应用程序能够读取数据。但是,当我再次杀死新当选的小学时,之前被杀的人现在已经升职了。这意味着我有一个小学。在这种情况下,第二次故障转移无法通过MongoDB驱动程序。它会抛出MongoServerSelectionException
。已经超过5天我无法找到解决方案。下面是我的java代码
static{
FileInputStream fis=null;
try {
/**** Get database ****/
// if database doesn't exists, MongoDB will create it for you
fis=new FileInputStream(GRMConstants.MONGODB_PROPERTY_FILE);
properties=new Properties();
properties.load(fis);
String[] host=properties.getProperty("MONGODB_SERVER_ADDRESS").split(",");
List<ServerAddress> server= new ArrayList<ServerAddress>();
for(int i=0;i<host.length;i++){
server.add(new ServerAddress(host[i],Integer.valueOf(properties.getProperty("MONGODB_PORT"))));
}
mongo = new MongoClient(server);
databaseName=properties.getProperty("MONGO_DATABASE");
//get database
database=mongo.getDB(databaseName);
} catch (UnknownHostException ex) {
log.error("UnknownHostException in MongoDBUtil while initilizing MongoDb server ...",ex);
} catch (MongoException ex) {
log.error("MongoException in MongoDBUtil while initilizing MongoDb server ...",ex);
} catch (IOException e) {
log.error("IOException in MongoDBUtil while initilizing MongoDb server ...",e);
} catch (Exception e) {
log.error("Exception in MongoDBUtil while initilizing MongoDb server ...",e);
} finally {
if(fis != null) {
try {
fis.close();
} catch (IOException e) {
log.error("Exception in MongoDBUtil while closing the input stream...", e);
}
}
}
}
但是如果重启服务器,问题就解决了。在杀死实例后,驱动程序似乎无法检测到更改。请帮忙。谢谢。