2

使用 Spring Data 连接到 mongodb 时出现以下错误:

java.io.IOException: couldn't connect to [/127.0.0.1:27017] bc:java.net.ConnectException: Connection refused: connect
at com.mongodb.DBPort._open(DBPort.java:228)
at com.mongodb.DBPort.go(DBPort.java:112)
at com.mongodb.DBPort.call(DBPort.java:79)
at com.mongodb.DBTCPConnector.call(DBTCPConnector.java:218)
at com.mongodb.DBApiLayer$MyCollection.__find(DBApiLayer.java:305)
at com.mongodb.DB.getCollectionNames(DB.java:284)
at org.springframework.data.mongodb.core.MongoTemplate$14.doInDB(

请找到我的配置:

@Configuration
public class AppConfig {

public @Bean MongoOperations mongoTemplate(Mongo mongo) {
    MongoTemplate mongoTemplate = new MongoTemplate(mongo, "mydb");
    return mongoTemplate;
}

/*
 * Factory bean that creates the Mongo instance
 */
public @Bean MongoFactoryBean mongo() {
    MongoFactoryBean mongo = new MongoFactoryBean();
    mongo.setHost("10.6.120.180");
    mongo.setPort(27017);
    return mongo;
}

/*
 * Use this post processor to translate any MongoExceptions thrown in @Repository annotated classes
 */
public @Bean PersistenceExceptionTranslationPostProcessor persistenceExceptionTranslationPostProcessor() {
    return new PersistenceExceptionTranslationPostProcessor();
}

}

Mongo-context-test.xml

    <mongo:db-factory dbname="mydb"/>
    <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
    <constructor-arg ref="mongoDbFactory"/>
</bean>

我是 Spring Data 和 MongoDB 的新手。请指教,为什么我会收到这个错误?

提前致谢。

4

2 回答 2

2

您确定正在使用您的 AppConfig 类吗?

正如我在评论中提到的,您收到的错误表明您的程序正在尝试连接到服务器上的 MongoDB,127.0.0.1而您发布的 AppConfig 类清楚地表明您想要连接到 IP 地址10.6.120.180

如果您以某种方式获取包含mongo.setHost("localhost")Github上发布的示例代码中的 AppConfig 类,则可能会发生这种情况。

更新:根据 OP 的评论,mongoTemplatein的类引用Mongo-context-test.xml指向 Spring Framework 的默认MongoTemplate类。

根据 SpringSource 文档Introduction to MongoTemplate使用可以使用 Java 创建和注册 MongoTemplate 的实例使用 Spring 的 XML<beans/>模式配置 MongoTemplate。

显然,使用<beans/>模式优先于您在 Java 中的实现。如果您使用 <beans/>架构,那么您需要使用<mongo:mongo host="localhost" port="27017"/>OP 在他的评论中指出的指定您的主机和端口要求。

于 2012-09-24T14:26:38.157 回答
0

如果您打算使用自定义名称定义自己的配置 bean,则可以通过执行以下操作排除 Spring 的自动配置类:

@EnableAutoConfiguration(exclude={MongoAutoConfiguration.class, MongoDataAutoConfiguration.class})

或者

@SpringBootApplication(exclude={MongoAutoConfiguration.class, MongoDataAutoConfiguration.class})

请记住:当使用带有排除列表的 EnableAutoConfiguration/SpringBootApplication 时,请确保没有其他使用 EnableAutoConfiguration 或 SpringBootApplication 注释的类。

资料来源:如何在 spring-boot 中禁用 spring-data-mongodb 自动配置

于 2015-08-11T08:31:49.693 回答