Spring boot在添加mongo java驱动程序maven依赖项时尝试连接到mongo
我刚才补充说:Spring boot在添加mongo java驱动程序maven依赖项时尝试连接到mongo,java,mongodb,maven,spring-boot,unit-testing,Java,Mongodb,Maven,Spring Boot,Unit Testing,我刚才补充说: <dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> </dependency> 出于某种原因,当我使用mvn clean packagespring boot现在尝试连接到mongodb时: . ____ _
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
</dependency>
出于某种原因,当我使用mvn clean package
spring boot现在尝试连接到mongodb时:
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.1.7.RELEASE)
2019-10-11 20:36:58.418 INFO 14870 --- [ main] hello.GreetingControllerTests : Starting GreetingControllerTests on user-ThinkPad-X390 with PID 14870 (started by user in /home/user/repos/frontend-backend/backend)
2019-10-11 20:36:58.423 INFO 14870 --- [ main] hello.GreetingControllerTests : No active profile set, falling back to default profiles: default
2019-10-11 20:36:59.311 INFO 14870 --- [ main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor'
2019-10-11 20:36:59.565 INFO 14870 --- [ main] org.mongodb.driver.cluster : Cluster created with settings {hosts=[localhost:27017], mode=SINGLE, requiredClusterType=UNKNOWN, serverSelectionTimeout='30000 ms', maxWaitQueueSize=500}
2019-10-11 20:36:59.591 INFO 14870 --- [localhost:27017] org.mongodb.driver.cluster : Exception in monitor thread while connecting to server localhost:27017
com.mongodb.MongoSocketOpenException: Exception opening socket
at com.mongodb.internal.connection.SocketStream.open(SocketStream.java:67) ~[mongo-java-driver-3.8.2.jar:na]
at com.mongodb.internal.connection.InternalStreamConnection.open(InternalStreamConnection.java:126) ~[mongo-java-driver-3.8.2.jar:na]
at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:117) ~[mongo-java-driver-3.8.2.jar:na]
at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na]
Caused by: java.net.ConnectException: Connection refused (Connection refused)
at java.base/java.net.PlainSocketImpl.socketConnect(Native Method) ~[na:na]
at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:399) ~[na:na]
如果我只是删除测试或mongo依赖项,则不会启动上述mongo连接
但是在上面的测试中没有提到mongo,那么spring为什么要尝试启动mongo连接呢?如果我必须用一句话来回答,这是因为Springboot是自以为是的。当它通过
自动配置
类注意到pom中的mongo依赖时,它将尝试连接到mongo
如果您想覆盖默认行为并告诉Springboot不要进行MongoutoConfiguration,那么您可以这样做
@SpringBootApplication(exclude=MongoAutoConfiguration.class)
public class YourMainApplication {
public static void main(String[] args) {
SpringApplication.run(TestApplication.class, args);
}
}
@TestPropertySource(properties=
{"spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration"})
@SpringBootTest
public class GreetingControllerTests {...}
或者,您可以使用属性文件中的这一行执行此操作
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration
如果您执行上述任一操作,那么它将从应用程序中排除MongoutoConfiguration(而不仅仅是从测试中)。这意味着,当您启动应用程序时,您没有访问mongo的权限(如果这是您想要的)
由于SpringbootTest
注释加载整个应用程序上下文,因此它会查找这个主应用程序类。如果您排除了一些自动配置,那么它将排除,即使在您的测试中也是如此。所以你不会有连接到mongo的问题
如果您希望仅在测试中排除此自动配置(以便在运行应用程序时不会更改任何内容),可以这样做
@SpringBootApplication(exclude=MongoAutoConfiguration.class)
public class YourMainApplication {
public static void main(String[] args) {
SpringApplication.run(TestApplication.class, args);
}
}
@TestPropertySource(properties=
{"spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration"})
@SpringBootTest
public class GreetingControllerTests {...}