windofthesky 2015-05-11 03:16 采纳率: 0%
浏览 1790

MongoDB 3.0 Java Driver在Linux Server下多线程插入数据异常

使用MongoDB 3.0版本,部署环境为vSphere构建虚拟机,使用Java driver(3.0.0rc1)多线程写入数据到MongoDB,异常信息如下所示:
Caused by: java.lang.NullPointerException
at com.mongodb.connection.ProtocolHelper.isCommandOk(ProtocolHelper.java:61)
at com.mongodb.connection.WriteCommandProtocol.receiveMessage(WriteCommandProtocol.java:189)
at com.mongodb.connection.WriteCommandProtocol.execute(.java:76)
at com.mongodb.connection.InsertCommandProtocol.execute(InsertCommandProtocol.java:66)
at com.mongodb.connection.InsertCommandProtocol.execute(InsertCommandProtocol.java:37)
at com.mongodb.connection.DefaultServer$DefaultServerProtocolExecutor.execute(DefaultServer.java:155)
at com.mongodb.connection.DefaultServerConnection.executeProtocol(DefaultServerConnection.java:219)
at com.mongodb.connection.DefaultServerConnection.insertCommand(DefaultServerConnection.java:108)
at com.mongodb.operation.MixedBulkWriteOperation$Run$2.executeWriteCommandProtocol(MixedBulkWriteOperation.java:416)
at com.mongodb.operation.MixedBulkWriteOperation$Run$RunExecutor.execute(MixedBulkWriteOperation.java:604)
at com.mongodb.operation.MixedBulkWriteOperation$Run.execute(MixedBulkWriteOperation.java:363)
at com.mongodb.operation.MixedBulkWriteOperation$1.call(MixedBulkWriteOperation.java:148)
at com.mongodb.operation.MixedBulkWriteOperation$1.call(MixedBulkWriteOperation.java:141)
at com.mongodb.operation.OperationHelper.withConnectionSource(OperationHelper.java:186)
at com.mongodb.operation.OperationHelper.withConnection(OperationHelper.java:177)
at com.mongodb.operation.MixedBulkWriteOperation.execute(MixedBulkWriteOperation.java:141)
at com.mongodb.operation.MixedBulkWriteOperation.execute(MixedBulkWriteOperation.java:72)
at com.mongodb.Mongo.execute(Mongo.java:745)
at com.mongodb.Mongo$2.execute(Mongo.java:728)
at com.mongodb.MongoCollectionImpl.executeSingleWriteRequest(MongoCollectionImpl.java:482)
at com.mongodb.MongoCollectionImpl.insertOne(MongoCollectionImpl.java:277)

该异常为偶发性异常,在Windows上,Eclipse环境下,多线程测试,该异常完全不发生,当代码迁移到虚拟服务器上时,该异常偶尔发生;

有大牛遇到过类似情况吗?求教..

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-03 20:44
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    这个问题是由于MongoDB的连接池在处理连接时出现了问题。如果你使用的是Apache Maven或Gradle构建你的项目,并且你设置了连接池配置(例如通过spring.datasource.urlspring.datasource.username),那么这个连接池应该能够正确地管理连接并防止出现null指针。

    如果你没有设置连接池配置,或者你的连接池配置有问题,那么你需要检查以下几点:

    1. 确保你的Maven/Gradle项目的pom.xml文件中包含了正确的连接池依赖项。
    2. 检查你的数据库服务是否正常工作,因为如果数据库服务器无法提供连接,那么MongoDB的连接池将无法获取到有效的连接。
    3. 检查你的应用程序代码是否有错误,可能会导致null指针的情况。

    如果你已经确定了上述所有步骤都正确无误,但仍然遇到null指针的问题,那么可能需要进一步分析代码的具体细节来找出原因。这通常涉及到深入理解代码结构、异常处理机制以及数据库操作流程等知识。

    你可以尝试以下几个步骤来解决这个问题:

    • 尝试在不同的环境中重现问题,看看是否存在环境因素影响。
    • 使用断点调试工具检查代码执行路径,看是否有地方抛出NullPointerException。
    • 调整或重新配置连接池参数,看看是否能解决问题。
    • 查阅相关的Stack Overflow帖子,看看是否有其他人遇到相似问题并且找到了解决方案。

    希望以上建议对你有所帮助!

    评论

报告相同问题?