Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.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
Java Spring Boot Starter Web尝试在启动时连接到Mongo_Java_Spring_Mongodb_Spring Boot - Fatal编程技术网

Java Spring Boot Starter Web尝试在启动时连接到Mongo

Java Spring Boot Starter Web尝试在启动时连接到Mongo,java,spring,mongodb,spring-boot,Java,Spring,Mongodb,Spring Boot,我在使用Spring Boot和MongoDB外部驱动程序时遇到一些问题。我不能使用project Spring Data MongoDB,因为我需要使用Mongo提供的ufficial异步驱动程序。但是,我需要使用SpringBoot,因为我正在开发的模块是使用该库的更大项目的一部分 这是我的pom.xml文件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/

我在使用Spring Boot和MongoDB外部驱动程序时遇到一些问题。我不能使用project Spring Data MongoDB,因为我需要使用Mongo提供的ufficial异步驱动程序。但是,我需要使用SpringBoot,因为我正在开发的模块是使用该库的更大项目的一部分

这是我的
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>
这是我目前唯一的(空的)测试

@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
子句,以便停止springboot,尝试处理与Mongo的连接,如中所建议

我还注意到,在将依赖项添加到
springbootstarterweb
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})

可能
SpringBootTest
没有使用
TxViewApplication
作为上下文的源,因为您在其他地方有另一个
@SpringBootConfiguration
。如果您排除mongo,为什么要在同一类中定义
MongoClient
?我发布的代码是项目中唯一的代码。我合并了启动应用程序的同一类中的e配置需要显示的代码较少。您的意思是我不需要在Spring配置中定义任何MongoClient类型的对象吗?@StephaneNicoll,您建议如何将MongoDB的异步java驱动程序与Spring Boot集成?如果您排除自动配置,那么我们使用t尝试在启动时连接。您可以共享一个示例吗?@StephaneNicoll我在上共享了一个演示项目。
pom.xml
是使用Spring Initializer生成的。然后我将依赖项添加到mongo异步驱动程序。如果您尝试运行
DemoApplicationTests
,您将能够复制错误。非常感谢。我确实想使用mongo!但我确实想使用我不想让Spring Boot为我处理与它的连接。那么你是说我不能使用Spring依赖项注入机制来构建一个
MongoClient
实例,而不让Spring Boot拦截它?Spring Boot没有任何作用。你创建这个bean定义的事实使它在启动时连接。Spring Boot不负责Mongo驱动程序文档声明,简单创建MongoClient并不会强制db连接。您如何解释?哦,如果Mongo文档声明,这一定是Spring Boot的错误?看看调用堆栈,没有一个元素与Spring相关。用以下代码替换main,您会发现ve异常:
publicstaticvoidmain(String[]args)抛出IOException{MongoClient MongoClient=MongoClients.create();System.in.read();}
我将尝试询问MongoDB用户发生了什么。非常感谢您的耐心。
@EnableAutoConfiguration(exclude = {MongoReactiveAutoConfiguration.class})