[英]Spring Boot Starter-Web tries to connect to Mongo at startup
我在使用Spring Boot和MongoDB外部驱动程序时遇到了一些问题。 我不能使用Spring Data MongoDB项目,因为我需要使用Mongo给出的ufficial异步驱动程序。 但是,我需要使用Spring Boot,因为我正在开发的模块是使用该库的更大项目的一部分。
这是我的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
子句,以便阻止Spring Boot尝试处理自己与Mongo的连接,正如Mongo中建议的那样, 尝试自动连接到端口27017(localhost) 。
我还注意到,在添加到spring-boot-starter-web
的依赖项的pom.xml
之后,我开始出现错误。
如何禁止Spring Boot尝试在启动时自动连接到Mongo? 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();
}
不幸的是,没有任何改变。 Spring Boot似乎也以这种方式拦截MongoClient
对象:(
非常感谢。
你有自己配置的MongoClient
bean,如果你已经排除了自动配置,那对我没有任何意义。
我已经在你自己的配置中注释掉了@Bean
定义,现在没有尝试连接到Mongo。 我不确定我是否回答了你的问题而且你可能正在寻找其他东西,但如果你不想使用mongo,不要在你自己的配置中定义MongoClient
!
这有助于我们禁用MongoDB的异步java驱动程序以使用默认配置:
@EnableAutoConfiguration(exclude = {MongoReactiveAutoConfiguration.class})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.