>source

저는 처음이고 Java Spring Boot로 API를 개발하려고 합니다. MongoDB Config에 문제가 있고 다른 프로젝트에는 문제가 없습니다. 왜 그런지 이해가 안됩니다. 이미 보았지만 제안된 솔루션이 작동하지 않습니다.

SBApplication.java :

package basket;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.data.mongo.MongoRepositoriesAutoConfiguration;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@SpringBootApplication (scanBasePackages= { "basket.instrastructure.dao" })
@EnableSwagger2
@EnableAutoConfiguration //(exclude={MongoAutoConfiguration.class, MongoRepositoriesAutoConfiguration.class})
public class SBApplication {
    public static void main(String[] args) {
        SpringApplication.run(SBApplication.class, args);
    }
}

BasketRepository.java :

package basket.infrastructure.dao;
import java.util.ArrayList;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.stereotype.Repository;
import basket.domaine.model.Basket;
@Repository
public interface BasketRepository extends MongoRepository<Basket, Long> {
    public ArrayList<Basket> findAll();
    public Basket findById(String id);
}

ItemRepository.java :

package basket.infrastructure.dao;
import java.util.ArrayList;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.stereotype.Repository;
import basket.domaine.model.Item;
@Repository
public interface ItemRepository extends MongoRepository<Item, Long> {
    public Item findByName(String name);
    public ArrayList<Item> findAll();
    public Item findById(String id);
}

MongoConfig.java :

package basket.application.components;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.config.AbstractMongoConfiguration;
import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;
import com.mongodb.Mongo;
import com.mongodb.MongoClient;
import com.mongodb.MongoClientURI;
import com.mongodb.client.MongoDatabase;
@Configuration
@EnableMongoRepositories ("basket.infrastructure.dao")
public class MongoConfig extends  AbstractMongoConfiguration {
    @Override
    @Bean
    public Mongo mongo() throws Exception {
        MongoClientURI uri= new MongoClientURI("mongodb+srv://owner:[email protected]/test?retryWrites=true");
        MongoClient mongoClient= new MongoClient(uri);
        MongoDatabase database= mongoClient.getDatabase("test");
        return mongoClient;
    }
    @Override
    protected String getDatabaseName() {
        return "test";
    }
}

이 오류가 있습니다.

com.mongodb.MongoSocketOpenException: Exception opening socket
    at com.mongodb.connection.SocketStream.open(SocketStream.java:63) ~[mongodb-driver-core-3.4.2.jar:na]
    at com.mongodb.connection.InternalStreamConnection.open(InternalStreamConnection.java:115) ~[mongodb-driver-core-3.4.2.jar:na]
    at com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:113) ~[mongodb-driver-core-3.4.2.jar:na]
    at java.lang.Thread.run(Thread.java:748) [na:1.8.0_181]
Caused by: java.net.ConnectException: Connection refused (Connection refused)
    at java.net.PlainSocketImpl.socketConnect(Native Method) ~[na:1.8.0_181]
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) ~[na:1.8.0_181]
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) ~[na:1.8.0_181]
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) ~[na:1.8.0_181]
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) ~[na:1.8.0_181]
    at java.net.Socket.connect(Socket.java:589) ~[na:1.8.0_181]
    at com.mongodb.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:57) ~[mongodb-driver-core-3.4.2.jar:na]
    at com.mongodb.connection.SocketStream.open(SocketStream.java:58) ~[mongodb-driver-core-3.4.2.jar:na]
    ... 3 common frames omitted

제 실수를 이해하는 데 도움을 주실 수 있습니까? 감사합니다. 도움을 주시면 대단히 감사하겠습니다!

URL에 포트를 추가하는 것을 잊었습니다.

stacker2022-01-14 20:03:14
  • 답변 # 1

    속성 파일을 사용하여 애플리케이션으로 데이터베이스를 구성하고 스프링 부트가 db 구성으로 모든 작업을 수행하도록 하십시오.

    resources/application.properties 파일로 이동하여 다음 콘텐츠를 추가합니다.

    spring.data.mongodb.host=localhost
    spring.data.mongodb.port=27017
    spring.data.mongodb.database=mydatabase
    

    이렇게 하면 애플리케이션이 MongoDB 데이터베이스에 올바르게 연결할 수 있습니다.

    또한 기본 애플리케이션 클래스로 이동하여 선언 앞에 다음 주석을 추가합니다.

    @EnableMongoRepositories(basePackageClasses= foo.class)
    

  • 답변 # 2

    Mongo 인증 속성 파일을 구성하여 @Federico Gatti가 말한 대로 시도하십시오.

    spring.data.mongodb.database=MongoDatabaseName
    spring.data.mongodb.host=localhost
    spring.data.mongodb.port=27017
    

  • 답변 # 3

    MongoDB URI가 확실합니까? 일반적으로 URI 형식은mongodb://localhost:27017/foo.

    구성 빈을 사용하는 대신 스프링 부트를 사용하는 경우 application.properties파일을 사용하는 것이 좋습니다. 이 파일에 다음과 같은 속성을 작성하십시오.spring.data.mongodb.uri=mongodb://localhost:27017/fooSpring-boot는 code 수준에서 구성하지 않고 MongoClient에 속성을 자동으로 삽입합니다.

  • 이전 flutter : 이메일과 비밀번호에 하나의 TextFormField만 사용할 수 있습니까?
  • 다음 ios : SpriteKit 자식 노드(이름: 문자열 포함)는 nil을 반환합니다.