Spring данные MongoDb бросают ошибку Соединение отклонено

Получение следующей ошибки при подключении к mongodb с использованием данных Spring:

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-контекст-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. Пожалуйста, подскажите, почему я получаю эту ошибку?

Заранее спасибо.


person Jagan    schedule 24.09.2012    source источник
comment
Любопытно, что в ошибке подключения указан IP-адрес 127.0.0.1 (localhost), но вы вызвали mongo.setHost(10.6.120.180). Является ли IP-адрес 10.6.120.180 другим хостом?   -  person HeatfanJohn    schedule 24.09.2012


Ответы (2)


Вы уверены, что ваш класс AppConfig используется?

Как упоминалось в моем комментарии, ошибка, которую вы получаете, указывает на то, что ваша программа пытается подключиться к MongoDB на сервере 127.0.0.1, в то время как опубликованный вами класс AppConfig ясно показывает, что вы хотите подключиться к IP-адресу 10.6.120.180.

Это может произойти, если вы каким-то образом получаете класс AppConfig, содержащий mongo.setHost("localhost"), который находится в примере кода, опубликованном на Github.

Обновление: На основании комментария OP ссылка на класс для mongoTemplate в Mongo-context-test.xml указывала на класс Spring Framework по умолчанию MongoTemplate.

Согласно документации SpringSource Введение в MongoTemplate можно использовать Java для создания и регистрации экземпляра MongoTemplate ИЛИ настроить шаблон MongoTemplate с использованием схемы Spring XML <beans/>.

Очевидно, что использование схемы <beans/> имеет приоритет над вашей реализацией на Java. Если вы используете схему <beans/>, вам нужно использовать <mongo:mongo host="localhost" port="27017"/>, чтобы указать требования к вашему хосту и порту, как указано в OP в его комментарии.

person HeatfanJohn    schedule 24.09.2012
comment
Спасибо, Джон, за ваш ответ. Как вы сказали, он не вызывает AppConfig. Это решается путем изменения файла Mongo-context-test.xml ‹mongo:db-factory host=10.6.120.180 port=27017 dbname=mydb/› - person Jagan; 25.09.2012
comment
Ах да, теперь я вижу, ваш идентификатор bean-компонента mongoTemplate ссылается на класс org.springframework.data.mongodb.core.MongoTemplate. Изменение этого, чтобы указать на ваш класс, содержащий AppConfig, вместо добавления host, вероятно, также сработает. - person HeatfanJohn; 25.09.2012
comment
Может ли кто-нибудь помочь с тем же вопросом, но под другим углом зрения? :) Как настроить приложение весенней загрузки на быстрый сбой, если в подключении к Mongo было отказано? заранее спасибо - person Igor Petrov; 22.01.2018

Если вы планируете определить свои собственные компоненты конфигурации с вашими пользовательскими именами, вы можете исключить классы автоконфигурации Spring, выполнив следующие действия:

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

OR

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

Помните: при использовании EnableAutoConfiguration/SpringBootApplication со списком исключений убедитесь, что нет других классов, аннотированных с помощью EnableAutoConfiguration или SpringBootApplication.

Источник: Как отключить автоконфигурацию spring-data-mongodb в весенняя загрузка

person Vivek Sethi    schedule 11.08.2015