Mongo客户端{Mongo-Java-driver}创建挂起持续时间。没有异常抛出

时间:2016-01-19 05:27:24

标签: java mongodb mongo-java-driver

我每隔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

3 个答案:

答案 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罐子。