Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot在添加mongo java驱动程序maven依赖项时尝试连接到mongo_Java_Mongodb_Maven_Spring Boot_Unit Testing - Fatal编程技术网

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 {...}