Mongodbに挿入する単純なデータ構造(以下で参照するTransaction
)があります。
_{"amount":111,"debitAcc":"588188286231743e7d5c923d","type":"CHARGE"}
_
次のエラースタックが表示されました:
_com.mongodb.MongoSocketReadException: Prematurely reached end of stream
at com.mongodb.connection.SocketStream.read(SocketStream.Java:88)
at com.mongodb.connection.InternalStreamConnection.receiveResponseBuffers(InternalStreamConnection.Java:494)
at com.mongodb.connection.InternalStreamConnection.receiveMessage(InternalStreamConnection.Java:224)
at com.mongodb.connection.UsageTrackingInternalConnection.receiveMessage(UsageTrackingInternalConnection.Java:96)
at com.mongodb.connection.DefaultConnectionPool$PooledConnection.receiveMessage(DefaultConnectionPool.Java:440)
at com.mongodb.connection.WriteCommandProtocol.receiveMessage(WriteCommandProtocol.Java:262)
at com.mongodb.connection.WriteCommandProtocol.execute(WriteCommandProtocol.Java:104)
at com.mongodb.connection.InsertCommandProtocol.execute(InsertCommandProtocol.Java:67)
at com.mongodb.connection.InsertCommandProtocol.execute(InsertCommandProtocol.Java:37)
at com.mongodb.connection.DefaultServer$DefaultServerProtocolExecutor.execute(DefaultServer.Java:168)
at com.mongodb.connection.DefaultServerConnection.executeProtocol(DefaultServerConnection.Java:289)
at com.mongodb.connection.DefaultServerConnection.insertCommand(DefaultServerConnection.Java:118)
at com.mongodb.operation.InsertOperation.executeCommandProtocol(InsertOperation.Java:76)
at com.mongodb.operation.BaseWriteOperation$1.call(BaseWriteOperation.Java:139)
at com.mongodb.operation.BaseWriteOperation$1.call(BaseWriteOperation.Java:133)
at com.mongodb.operation.OperationHelper.withConnectionSource(OperationHelper.Java:422)
at com.mongodb.operation.OperationHelper.withConnection(OperationHelper.Java:413)
at com.mongodb.operation.BaseWriteOperation.execute(BaseWriteOperation.Java:133)
at com.mongodb.operation.BaseWriteOperation.execute(BaseWriteOperation.Java:60)
at com.mongodb.Mongo.execute(Mongo.Java:845)
at com.mongodb.Mongo$2.execute(Mongo.Java:828)
at com.mongodb.DBCollection.executeWriteOperation(DBCollection.Java:342)
at com.mongodb.DBCollection.insert(DBCollection.Java:337)
at com.mongodb.DBCollection.insert(DBCollection.Java:328)
at org.mongodb.morphia.DatastoreImpl.saveDocument(DatastoreImpl.Java:1297)
at org.mongodb.morphia.DatastoreImpl.tryVersionedUpdate(DatastoreImpl.Java:1340)
at org.mongodb.morphia.DatastoreImpl.save(DatastoreImpl.Java:1286)
at org.mongodb.morphia.DatastoreImpl.save(DatastoreImpl.Java:775)
at org.mongodb.morphia.DatastoreImpl.save(DatastoreImpl.Java:758)
_
私のmongodbバージョンは_3.4.2
_です。
Interetingは、ローカルの開発環境(mint linux 18.1)では問題がないということです。しかし、それは私のSIT環境、つまりubuntu 16.04では機能しません
何か案が?
ドキュメントを挿入するコードで更新します
transactionDao.save(...)
の実装は次の場所にあります。
更新2
システムは他の書き込みで動作します(より大きなレコードでも)
根本的な原因はありませんが、最終的にはフィールドタイプをBigDecimal
からdouble
に変更することで問題が解決しました。
この問題は、SIT環境と、mongodb cluserセットアップを持つ1つの開発者のWindows環境にあります。
ほとんどの場合、これは長い読み取り/書き込みによるタイムアウトの結果です。
タイムアウトを増やすか、完全に削除してください。
MongoClientOptions.Builder options_builder = new MongoClientOptions.Builder();
options_builder.maxConnectionIdleTime(<some_long_time>);
MongoClientOptions options = options_builder.build();
MongoClient mongo_db = new MongoClient ("your.db.address", options);
最も可能性の高い原因は、互換性バージョンの設定が低すぎることです。
Db.adminCommand({setFeatureCompatibilityVersion: "3.4"})を試してください
https://docs.mongodb.com/manual/reference/command/setFeatureCompatibilityVersion/