com.mongodb.MongoSocketOpenException: 使用Spring Boot和MongoDB云时打开套接字时出现异常

5
请为以下异常提供解决方案,该异常发生在运行我的rest api时执行springboot应用程序与mongodb云数据库。我已经在mongodb中创建了集合,并配置了以下属性。
com.mongodb.MongoSocketOpenException: Exception opening socket
    at com.mongodb.internal.connection.SocketStream.open(SocketStream.java:70) ~[mongodb-driver-core-4.1.1.jar:na]
    at com.mongodb.internal.connection.InternalStreamConnection.open(InternalStreamConnection.java:143) ~[mongodb-driver-core-4.1.1.jar:na]
    at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.lookupServerDescription(DefaultServerMonitor.java:188) ~[mongodb-driver-core-4.1.1.jar:na]
    at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:144) ~[mongodb-driver-core-4.1.1.jar:na]
    at java.base/java.lang.Thread.run(Thread.java:832) ~[na:na]
Caused by: java.net.ConnectException: Connection refused: no further information
    at java.base/sun.nio.ch.Net.pollConnect(Native Method) ~[na:na]
    at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:589) ~[na:na]
    at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:549) ~[na:na]
    at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:597) ~[na:na]
    at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:333) ~[na:na]
    at java.base/java.net.Socket.connect(Socket.java:648) ~[na:na]
    at com.mongodb.internal.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:78) ~[mongodb-driver-core-4.1.1.jar:na]
    at com.mongodb.internal.connection.SocketStream.initializeSocket(SocketStream.java:79) ~[mongodb-driver-core-4.1.1.jar:na]
    at com.mongodb.internal.connection.SocketStream.open(SocketStream.java:65) ~[mongodb-driver-core-4.1.1.jar:na]
    ... 4 common frames omitted

Model class
------------
package com.praveen.entity;

import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;

import lombok.Data;

@Document
public class Products {

    @Id
    private String id;
    private Integer p_id;
    private String p_name;
    private Integer p_cost;
    private Integer countInStock;
    private Integer numReviews;
    private String image;
    
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public Integer getP_id() {
        return p_id;
    }
    public void setP_id(Integer p_id) {
        this.p_id = p_id;
    }
    public String getP_name() {
        return p_name;
    }
    public void setP_name(String p_name) {
        this.p_name = p_name;
    }
    public Integer getP_cost() {
        return p_cost;
    }
    public void setP_cost(Integer p_cost) {
        this.p_cost = p_cost;
    }
    public Integer getCountInStock() {
        return countInStock;
    }
    public void setCountInStock(Integer countInStock) {
        this.countInStock = countInStock;
    }
    public Integer getNumReviews() {
        return numReviews;
    }
    public void setNumReviews(Integer numReviews) {
        this.numReviews = numReviews;
    }
    public String getImage() {
        return image;
    }
    public void setImage(String image) {
        this.image = image;
    }
    @Override
    public String toString() {
        return "Products [id=" + id + ", p_id=" + p_id + ", p_name=" + p_name + ", p_cost=" + p_cost + ", countInStock="
                + countInStock + ", numReviews=" + numReviews + ", image=" + image + "]";
    }
    
    
}


RestController class
---------------------

package com.praveen.rest;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RestController;

import com.praveen.entity.Products;
import com.praveen.service.ProductsService;

@RestController
public class ProductsRestController {

    @Autowired
    private ProductsService service;
    
    @GetMapping("/products")
    public ResponseEntity<List<Products>> getProducts(){
        List<Products> allProducts = service.getAllProducts();
        if(allProducts != null) {
            return new ResponseEntity<List<Products>>(allProducts, HttpStatus.OK);
        }else {
            return new ResponseEntity<List<Products>>(HttpStatus.BAD_REQUEST);
        }
    }
}


Service class
--------------
package com.praveen.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.praveen.entity.Products;
import com.praveen.repository.ProductsRepository;

@Service
public class ProductsServiceImpl implements ProductsService {

    @Autowired
    private ProductsRepository prodRepo;
    
    @Override
    public List<Products> getAllProducts() {
        List<Products> productsList = prodRepo.findAll();
        if(productsList != null) {
            System.out.println(productsList);
            return productsList;
        }
        return null;
    }

}


Repository 
-----------
package com.praveen.repository;

import java.io.Serializable;

import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.stereotype.Repository;

import com.praveen.entity.Products;

@Repository
public interface ProductsRepository extends MongoRepository<Products, Serializable> {

}


application.properties
-----------------------
spring.data.mongodb.url = mongodb+srv://praveen:praveen@cluster0.qrvkm.mongodb.net/miniproject?retryWrites=true&w=majority
spring.data.mongodb.database = products
spring.data.mongodb.port = 27017
spring.data.mongodb.repositories.enabled=true

pom.xml
-------
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.2</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.praveen</groupId>
    <artifactId>NgRx-Products</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>
    <name>05-MiniProject-NgRx-Products</name>
    <description>NgRx package with Products data using springboot</description>
    <properties>
        <java.version>15</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>


请提供任何解决上述异常的解决方案,我已经在上面提供了所有的文件。

ConnectException: Connection refused 是一个网络问题,意味着您的应用程序无法连接到Mongo主机端口。您可以尝试使用本地Mongo服务器,或者尝试通过故障排除您的网络(使用telnet,检查防火墙/代理等),或者先尝试使用Mongo客户端。 - boly38
将应用程序迁移到新服务器(Linux)后,我遇到了相同的问题。我正在使用IntelliJ IDEA,并使用“创建数据源”成功连接到外部MongoDB服务器。在其他主机上它运行良好。 - Robert Daniels
6个回答

1
尝试在主类文件中添加以下注释: @EnableAutoConfiguration(exclude={MongoAutoConfiguration.class})。 这将排除MongoAutoConfiguration类的自动配置。

0
你可以通过以下简单的步骤来完成:
1. 在开始菜单中搜索服务。 2. 搜索Mongo DB服务器并点击它。 3. 点击启动/重启。 现在尝试连接Mongo DB,它应该正常工作了。

0

这个异常是由于应用程序属性中mongodb端口设置不正确导致的。只需在application.properties文件中更改spring.data.mongodb.port=27017,就可以解决问题。同时确保您已经在本地启动了mongodb服务器。


0

检查连接到 MongoDB 本地服务器,使用在 application.properties 中提到的 url:portNumber,该文件是您的代码执行的位置。


0

在开始菜单中搜索服务。 打开它。 在那里搜索MongoDB。 从那里启动/重新启动MongoDB服务。 应该能正常工作。


0
Spring Boot 3 和 Kotlin:
import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration

@SpringBootApplication(
    exclude = [MongoAutoConfiguration::class],
)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接