我每隔5分钟运行一台运行在Linux机器上的cron-job。该作业执行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)。这是否可以对此负责,因为此脚本之前工作正常。
请帮忙。
此致 Vibhav
答案 0 :(得分:0)
你可以做的事情是你可以抛出mongo异常尝试mongo客户端卡住了你会知道试试这个https://api.mongodb.org/java/2.6/com/mongodb/MongoException.html
答案 1 :(得分:0)
是的当然,实际上我是在java中创建抓取工具来获取任何特定网站的所有链接并验证css和html结构使用Jsoup和jcabi api但是当我用来存储数据库的链接时它不会丢弃任何异常,甚至也不存储数据。所以我这样做了
catch (MongoException e){
System.err.print(e.getClass().getName()+": "+e.getMessage());
}
答案 2 :(得分:0)
你有没有检查过像你之前为你的项目上传过的jar的兼容性,比如Mongo mongo = new Mongo(host,port);但是这已被弃用了。试着检查一下甚至是你的MongoDb罐子。