#mongodb #spring-boot #mongodb-atlas
#mongodb #весенняя загрузка #mongodb-atlas
Вопрос:
У меня возникла эта проблема при попытке загрузить изображение в базу данных Atlas с помощью SpringBoot. Когда я выполняю тест в локальной базе данных MongoDB, он работает хорошо.
Также мой проект хорошо подключен к Atlas, потому что я могу использовать другой api для загрузки изображения «logo», но для моего API «Image» он не работает, он печатает это:
2020-11-01 18:04:17.095 WARN 27452 --- [nio-8088-exec-2] org.mongodb.driver.connection : Got socket exception on connection [connectionId{localValue:4, serverValue:37526}] to cluster0-shard-00-02.1c6kg.mongodb.net:27017. All connections to cluster0-shard-00-02.1c6kg.mongodb.net:27017 will be closed.
2020-11-01 18:04:17.103 INFO 27452 --- [nio-8088-exec-2] org.mongodb.driver.connection : Closed connection [connectionId{localValue:4, serverValue:37526}] to cluster0-shard-00-02.1c6kg.mongodb.net:27017 because there was a socket exception raised by this connection.
2020-11-01 18:04:17.104 INFO 27452 --- [nio-8088-exec-2] org.mongodb.driver.cluster : No server chosen by WritableServerSelector from cluster description ClusterDescription{type=REPLICA_SET, connectionMode=MULTIPLE, serverDescriptions=[ServerDescription{address=cluster0-shard-00-00.1c6kg.mongodb.net:27017, type=REPLICA_SET_SECONDARY, state=CONNECTED, ok=true, minWireVersion=0, maxWireVersion=8, maxDocumentSize=16777216, logicalSessionTimeoutMinutes=30, roundTripTimeNanos=67785768, setName='atlas-d9ovwb-shard-0', canonicalAddress=cluster0-shard-00-00.1c6kg.mongodb.net:27017, hosts=[cluster0-shard-00-00.1c6kg.mongodb.net:27017, cluster0-shard-00-01.1c6kg.mongodb.net:27017, cluster0-shard-00-02.1c6kg.mongodb.net:27017], passives=[], arbiters=[], primary='cluster0-shard-00-02.1c6kg.mongodb.net:27017', tagSet=TagSet{[Tag{name='nodeType', value='ELECTABLE'}, Tag{name='provider', value='GCP'}, Tag{name='region', value='CENTRAL_US'}, Tag{name='workloadType', value='OPERATIONAL'}]}, electionId=null, setVersion=1, lastWriteDate=Sun Nov 01 18:04:13 PST 2020, lastUpdateTimeNanos=124567789557591}, ServerDescription{address=cluster0-shard-00-02.1c6kg.mongodb.net:27017, type=UNKNOWN, state=CONNECTING}, ServerDescription{address=cluster0-shard-00-01.1c6kg.mongodb.net:27017, type=REPLICA_SET_SECONDARY, state=CONNECTED, ok=true, minWireVersion=0, maxWireVersion=8, maxDocumentSize=16777216, logicalSessionTimeoutMinutes=30, roundTripTimeNanos=70453359, setName='atlas-d9ovwb-shard-0', canonicalAddress=cluster0-shard-00-01.1c6kg.mongodb.net:27017, hosts=[cluster0-shard-00-00.1c6kg.mongodb.net:27017, cluster0-shard-00-01.1c6kg.mongodb.net:27017, cluster0-shard-00-02.1c6kg.mongodb.net:27017], passives=[], arbiters=[], primary='cluster0-shard-00-02.1c6kg.mongodb.net:27017', tagSet=TagSet{[Tag{name='nodeType', value='ELECTABLE'}, Tag{name='provider', value='GCP'}, Tag{name='region', value='CENTRAL_US'}, Tag{name='workloadType', value='OPERATIONAL'}]}, electionId=null, setVersion=1, lastWriteDate=Sun Nov 01 18:04:13 PST 2020, lastUpdateTimeNanos=124567793068830}]}. Waiting for 30000 ms before timing out
2020-11-01 18:04:17.273 INFO 27452 --- [ngodb.net:27017] org.mongodb.driver.cluster : Discovered replica set primary cluster0-shard-00-02.1c6kg.mongodb.net:27017
2020-11-01 18:04:18.497 INFO 27452 --- [nio-8088-exec-2] org.mongodb.driver.connection : Opened connection [connectionId{localValue:5, serverValue:41707}] to cluster0-shard-00-02.1c6kg.mongodb.net:27017
2020-11-01 18:04:19.725 WARN 27452 --- [nio-8088-exec-2] org.mongodb.driver.connection : Got socket exception on connection [connectionId{localValue:5, serverValue:41707}] to cluster0-shard-00-02.1c6kg.mongodb.net:27017. All connections to cluster0-shard-00-02.1c6kg.mongodb.net:27017 will be closed.
2020-11-01 18:04:19.726 INFO 27452 --- [nio-8088-exec-2] org.mongodb.driver.connection : Closed connection [connectionId{localValue:5, serverValue:41707}] to cluster0-shard-00-02.1c6kg.mongodb.net:27017 because there was a socket exception raised by this connection.
Это действительно проводное, почему я получил это исключение сокета? Я также установил время ожидания сокета на большое число
Вот моя конфигурация MongoDB в файле application.properties: spring.data.mongodb.uri=mongodb srv://admin:password@cluster0.1c6kg.mongodb.net/database-name?retryWrites=trueamp;w=majorityamp;connectTimeoutMS=12000amp;socketTimeoutMS=12000amp;keepAlive=true
Я также проверяю свои зависимости, у меня есть:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.12.7</version>
</dependency>
Это действительно расстраивает, пытаясь решить это уже несколько часов. Могу ли я в любом случае настроить фрагменты кластера в Atlas??
Спасибо, если кто-то знает об этой проблеме
Комментарии:
1. Я думаю, что проблема в том, что загруженное изображение слишком большое, и поскольку база данных размещена в Atlas, при записи такого большого файла (размер двоичного содержимого> 5 МБ) это занимает слишком много времени, что недопустимо в Atlas, поэтому, как настроить параметр, связанный с сокетами Atlas, будет ответом, явсе еще ищете, как это сделать, кто-нибудь знает об этом?
2. Я проверял, когда я пытался это сделать
mongotemplate.insert(Object)
, когда размер объекта превышает 3 МБ, этот запрос на вставку завершится ошибкой и вернет исключение MongoDBSocketWrite3. Когда я пытаюсь вставить большой документ из кампуса MongoDB, это работает, кажется, проблема в том, что отправка большого файла из SpringBoot с MongoTemplate во внешнюю базу данных. Есть ли какой-либо способ, которым я могу это настроить?
Ответ №1:
Проблема решена, она вызвана версией Java-драйвера MongoDB. Я использовал Java 11 для компиляции своего проекта, после того, как я изменил Java на 14, проблема решена