我有一个 cron 作业在每 5 分钟运行一次的 Linux 机器上运行。该作业执行一个 Java 类。
private MongoClient createConnection(int retry,List<ServerAddress> host){
try {
System.out.println("Retrying----------"+retry);
MongoClient client = new MongoClient(host, MongoClientOptions.builder()
.connectionsPerHost(10)
.threadsAllowedToBlockForConnectionMultiplier(5)
.connectTimeout(5000).writeConcern(WriteConcern.NORMAL).build());
client.getDB("admin").command("ping").throwOnError();
retry = 0;
return client;
} catch (Exception e) {
retry++;
if (retry < retryLimit) {
createConnection(retry,host);
} else {
System.out.println("Connection could not be established to host-"+host);
}
return null;
}
}
retry 是整数值,表示在主机无法访问的情况下可以尝试创建客户端的次数。
我要传递的主机列表是 -
public static List<ServerAddress> HOST_SCRIPT = new ArrayList<ServerAddress>() {
private static final long serialVersionUID = 1L;
{
try {
add(new ServerAddress("PrimaryHost23", 27017));
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
};
当我创建 MongoClient 时,代码被卡住了。它并不总是发生。当我在本地机器上运行时,代码工作正常并且永远不会挂起。没有抛出异常。
我最近升级了 Linux 机器操作系统(从 CentOS 5 到 CentOS 6)。这可以对此负责吗,因为该脚本之前运行良好。请帮忙。
问候, 维巴夫