스프링 부트 및 MongoDB 외장 드라이버를 사용할 때 몇 가지 문제가 발생합니다. Mongo가 제공 한 비공식 비동기 드라이버를 사용해야하기 때문에 Spring Data MongoDB 프로젝트를 사용할 수 없습니다. 그러나 개발중인 모듈이이 라이브러리를 사용하는 더 큰 프로젝트의 일부이기 때문에 Spring Boot를 사용해야합니다.스프링 부트 스타터 - 웹이 시작시 Mongo에 연결하려고합니다.
여기 내 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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>tx-view</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- omissis -->
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver-async</artifactId>
<version>${mongodb.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
자세한 내용은 Spring Boot 1.4.1 및 Mongo Async Driver 3.2.2를 사용하고 있습니다.
여기가 내 용도입니다.
@SpringBootApplication(exclude = {MongoAutoConfiguration.class, MongoDataAutoConfiguration.class})
public class TxViewApplication {
public static void main(String[] args) {
SpringApplication.run(TxViewApplication.class, args);
}
@Value("${mongo.uri}")
private String mongoUri;
@Bean
public MongoClient mongoClient() {
return MongoClients.create(mongoUri);
}
}
나는 현재 유일한 (비어있는) 테스트를 따른다.
@SpringBootTest
@RunWith(SpringRunner.class)
public class ApplicationTest {
@Test
public void loadContext() throws Exception {}
}
나는이 프로젝트에 다른 코드를 없습니다. 몽고에 자신의 연결을 처리하려고 봄 부팅을 중지하기 위해
2016-11-22 15:43:58.597 INFO 4572 --- [null'}-db:27017] org.mongodb.driver.cluster : Exception in monitor thread while connecting to server db:27017
com.mongodb.MongoException: java.io.IOException: Il computer remoto ha rifiutato la connessione di rete.
at com.mongodb.connection.InternalStreamConnection.open(InternalStreamConnection.java:125) ~[mongodb-driver-core-3.2.2.jar:na]
at com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:128) ~[mongodb-driver-core-3.2.2.jar:na]
at java.lang.Thread.run(Thread.java:745) [na:1.8.0_101]
Caused by: java.io.IOException: Il computer remoto ha rifiutato la connessione di rete.
at sun.nio.ch.Iocp.translateErrorToIOException(Iocp.java:309) ~[na:1.8.0_101]
at sun.nio.ch.Iocp.access$700(Iocp.java:46) ~[na:1.8.0_101]
at sun.nio.ch.Iocp$EventHandlerTask.run(Iocp.java:399) ~[na:1.8.0_101]
at sun.nio.ch.AsynchronousChannelGroupImpl$1.run(AsynchronousChannelGroupImpl.java:112) ~[na:1.8.0_101]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) ~[na:1.8.0_101]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) ~[na:1.8.0_101]
... 1 common frames omitted
당신이 볼 수 있듯이, 내가 제대로 SpringBootApplication
주석의 exclude
조항을 삽입 한 : 나는 테스트를 실행했을 때, 나는 다음과 같은 오류가 Mongo tries to connect automatically to port 27017(localhost)에 나와 있습니다.
나는 또한 spring-boot-starter-web
에 대한 의존성이있는 pom.xml
에 추가 된 후에 오류가 발생하기 시작했습니다.
시동시 Mongo에 자동으로 연결되도록 Spring Boot를 어떻게 금지 할 수 있습니까? MongoDB 드라이버의 동기 버전에도 같은 문제가 있습니다.
--- 편집 --- 나는 또한 이러한 방법으로, async.MongoClient
개체 주위에 래퍼를 구축하려고 한
는 :
public class MongoWrapper {
private final MongoClient mongo;
public MongoWrapper() {
mongo = MongoClients.create();
}
public MongoClient getMongo() {
return mongo;
}
}
구성은 적절하게 변경되었습니다.
@Bean
public MongoWrapper mongo() {
return new MongoWrapper();
}
불행히도, 아무것도 변경되지 않았습니다. 봄 부팅
덕분에이 방법 :(도 많이를 MongoClient
객체를 가로 챌 것 같다.
어쩌면'SpringBootTest'는 다른'@ SpringBootConfiguration'을 가지고 있기 때문에'TxViewApplication'을 컨텍스트의 소스로 사용하지 않을 것입니다. mongo를 제외하면 왜 같은 클래스에서'MongoClient'를 정의합니까? –
내가 게시 한 코드는 프로젝트에있는 유일한 코드입니다.표시 할 코드가 적도록 응용 프로그램을 시작하는 동일한 클래스의 구성을 병합했습니다. Spring 구성에서 MongoClient 유형의 객체를 정의 할 필요가 없다는 것을 의미합니까? –
@StephaneNicoll, MongoDB의 async java 드라이버를 Spring Boot와 어떻게 통합 할 것을 제안합니까? –