【发布时间】:2021-02-14 17:21:53
【问题描述】:
我在尝试使用 SpringBoot 将图像上传到 Atlas 数据库时遇到了这个问题。在本地 MongoDB 数据库上进行测试时,效果很好。
我的项目也很好地连接到 Atlas,因为我可以使用另一个 api 上传“logo”图像,但对于我的“Image”api,它不起作用,它会打印:
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.
这真的是有线的,为什么我得到这个套接字异常?我还将套接字超时设置为一个很大的数字
这是我在 application.properties 文件中的 MongoDB 配置:
spring.data.mongodb.uri=mongodb+srv://admin:password@cluster0.1c6kg.mongodb.net/database-name?retryWrites=true&w=majority&connectTimeoutMS=12000&socketTimeoutMS=12000&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 上配置 Cluster-Shards 吗??
如果有人知道这个问题,谢谢
【问题讨论】:
-
我觉得问题是上传的图片太大了,因为Atlas托管的数据库,写这么大的文件(二进制内容大小> 5MB)时,时间太长,这是不允许的在 Atlas 中,那么如何配置 Atlas Sockets 相关参数将是答案,我还在寻找如何做到这一点,有人知道吗?
-
我测试过,当我尝试做
mongotemplate.insert(Object)时,当Object size大于3MB时,这个insert请求会失败并返回一个MongoDBSocketWrite Exception -
当我尝试从 MongoDB Campus 插入一个大文档时,它可以工作,似乎问题是因为使用 MongoTemplate 从 SpringBoot 发送大文件到外部数据库。有什么办法可以配置吗?
标签: mongodb spring-boot mongodb-atlas