1

我有一个 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)。这可以对此负责吗,因为该脚本之前运行良好。请帮忙。

问候, 维巴夫

4

3 回答 3

-1

是的,当然,实际上我是在 java 中创建爬虫,它获取任何特定网站的所有链接并使用 Jsoup 和 jcabi api 验证 css 和 html 结构,但是当我用来存储指向数据库的链接时,它没有抛出任何异常和甚至不存储数据。所以我做了这个

 catch (MongoException e){
        System.err.print(e.getClass().getName()+": "+e.getMessage());
    }
于 2016-01-19T08:34:01.830 回答
-1

你可以做的事情是你可以抛出 mongo 异常试试 mongo 客户端卡住你会知道试试这个https://api.mongodb.org/java/2.6/com/mongodb/MongoException.html

于 2016-01-19T06:01:11.163 回答
-1

您是否检查过您为项目上传的 jar 的兼容性,就像之前一样 Mongo mongo = new Mongo(host,port); 但这已被弃用。试着检查一下,甚至是你的 MongoDb jar。

于 2016-01-19T12:11:58.500 回答