我在使用Spring Boot和MongoDB外部驱动程序时遇到一些问题。我无法使用Spring Data MongoDB项目,因为我需要使用Mongo提供的通用异步驱动程序。但是,我需要使用Spring Boot,因为我正在开发的模块是使用此库的更大项目的一部分。
这是我的pom.xml档案。
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
我还注意到,除了对pom.xml的依赖项之后,我开始出现错误spring-boot-starter-web。
spring-boot-starter-web
如何禁止Spring Boot在启动时尝试自动连接到Mongo?MongoDB驱动程序的同步版本存在相同的问题。
-编辑-
我还尝试通过async.MongoClient这种方式围绕对象构建包装器:
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
非常感谢。
您MongoClient在自己的配置中有一个Bean,如果您排除了自动配置,那对我来说毫无意义。
我已经@Bean在您自己的配置中注释掉了定义,并且现在不尝试连接到Mongo。我不确定我是否会回答您的问题,您可能正在寻找其他东西,但是如果您不想使用mongo,请不要MongoClient在自己的配置中定义a !
@Bean