2016-12-22 5 views
0

В настоящее время я создаю веб-приложение весенней загрузки с использованием mongodb. Локально я могу запустить свое приложение, и данные извлекаются и сохраняются. , но не на литейном рынке. Любые советы, ссылки или что-нибудь, что мне поможет, будут очень благодарны!Spring Boot и как настроить подробности подключения к MongoDB на облачном литейном заводе?

Проблема

Когда я толкнул его в облака литейное, я не могу подключиться к MongoDB. Я знаю, что нам нужно настроить что-то на облачном литейном заводе, чтобы он работал. Я попытался использовать PCM mongodb, даже когда я привязываю его к моему приложению, он все еще не запускает мое приложение. Я пробирался через интернет, пытаясь найти правильные конфигурации для этого.

Другие мысли

Я никогда не настроить имя пользователя и пароль, когда я использовал MongoDB. В настоящее время я просто использую localhost с port27017. Возможно, мне нужно настроить учетные данные на V_CAP или env varibles, но я не могу редактировать их в пользовательском интерфейсе cloudfoundry.com. Будет ли запрос командной строки настроить эти переменные в cf? Я проверить несколько документов, но я не ясно, куда добавить эти бобы в какой файл конфигурации или это помогло бы получить MongoDB работает на облако литейных Doc1

Ошибка соединения на облако литейных

OUT org.springframework.beans.factory.UnsatisfiedDependencyException: Ошибка создания bean-компонента с именем 'indexController': неудовлетворительно зависимость, выраженная через поле 'apL'; вложенное исключение: org.springframework.beans.factory.BeanCreationException: Ошибка создание bean-компонента с именем 'appPortList': вызов метода init не удалось; Вложенное исключение: org.springframework.dao.DataAccessResourceFailureException: Сроки: после 30000 мс в ожидании сервера, который соответствует ReadPreferenceServerSelector {readPreference = primary}. Клиентский вид Состояние кластера: {type = UNKNOWN, servers = [{address = 127.0.0.1: 27017, type = UNKNOWN, state = CONNECTING, exception = {com.mongodb.MongoSocketOpenException: открытие исключения socket}, вызванное по {java.net.ConnectException: соединение отклонено}}]; Вложенное исключение - com.mongodb.MongoTimeoutException: Сроки после 30000 мс при ожидании сервера, который соответствует ReadPreferenceServerSelector {readPreference = primary}. Клиентский вид Состояние кластера: {type = UNKNOWN, servers = [{address = 127.0.0.1: 27017, type = UNKNOWN, state = CONNECTING, exception = {com.mongodb.MongoSocketOpenException: открытие исключения socket}, вызванное по {java.net.ConnectException: соединение отклонено}}

+0

Вы работаете в PWS (Pivotal Web Services) или на Bluemix или на Swisscom? Использование mongodb может немного отличаться от этих PaaSes. – user152468

+0

PWS, Как я могу создать имя пользователя и пароль mongodb, чтобы передать его в эти переменные. – Jesse

+0

Имя пользователя и пароль должны быть созданы PWS для вас. Вы можете увидеть их, проверив среду вашего приложения - например, путем запуска 'cf env ' – user152468

ответ

0

Теоретически, соединители для облаков весны должны делать это за вас, но у меня были проблемы с ним в прошлом.

В качестве альтернативы, вам необходимо добавить весеннюю фасоль, расширяющую AbstractMongoConfiguration. В этой конфигурации вы должны вставить имя хоста, порт, имя пользователя, имя базы данных и пароль, которые вы найдете в переменной окружения VCAP_SERVICES.

Вы можете автоматически вставить это, получив значение переменной VCAP_SERVICES, используя System.getEnv («VCAP_SERVICES»), и проанализируйте его с помощью JACKSON или другой библиотеки JSON.

@Configuration 
@Profile("cloud") 
public class DatabaseConfiguration extends AbstractMongoConfiguration { 

    @Bean 
    public ValidatingMongoEventListener validatingMongoEventListener() { 
     return new ValidatingMongoEventListener(validator()); 
    } 

    @Bean 
    public LocalValidatorFactoryBean validator() { 
     return new LocalValidatorFactoryBean(); 
    } 

    @Override 
    public String getDatabaseName() { 
     return this.databaseName; 
    } 

    @Override 
    @Bean 
    public Mongo mongo() throws Exception { 
     List<ServerAddress> serverAddresses = new ArrayList<ServerAddress>(); 
     ServerAddress address = new ServerAddress("my_host", 7777); 
     serverAddresses.add(address); 
     return new MongoClient(serverAdresses, 
       singletonList(
         MongoCredential.createCredential(
           "my_user_name", 
           "my_database_name", 
           "my_password".toCharArray() 
         ) 
       ) 
     ); 
    } 
} 

Относительно ваших «других мыслей». Невозможно редактировать переменную VCAP_SERVICES, предоставляемую CloudFoundry. Вместо этого он должен быть прочитан вашим приложением, так что ваше приложение знает, где найти экземпляр mongodb, предоставленный для него CF.

Однако вы можете добавить в приложение дополнительные переменные среды, используя 'cf set-env'. Но это не поможет решить вашу проблему, насколько я могу судить.

+0

Спасибо! Где я могу узнать больше об этой конфигурации? Я выполнил ваш скрипт выше, у меня есть ошибка при возврате this.databasename и singletonList. – Jesse

0

Существует действительно хорошее сообщение в блоге о привязке к службам данных на CF в блоге Spring Framework: https://spring.io/blog/2015/04/27/binding-to-data-services-with-spring-boot-in-cloud-foundry.

Это сообщение использует реляционные отношения с JPA в своих примерах, но все, что показано, также работает для MongoDB.

+0

Я наткнулся на ваш пример github, вы связали mongodb с вашим приложением, используя облачный профиль. Куда идут данные после того, как вы связали mongodb с вашим приложением? Я пытаюсь найти все мои сохраненные данные. – Jesse

+0

Вероятно, вы хотите получить компонент MongoDbFactory в контексте приложения, как в этом примере: https://github.com/cloudfoundry-samples/spring-music/blob/master/src/main/java/org/cloudfoundry/samples /music/config/data/MongoCloudConfig.java. Затем создайте компонент репозитория MongoDB Spring Data, как в этом примере: https://github.com/cloudfoundry-samples/spring-music/blob/master/src/main/java/org/cloudfoundry/samples/music/repositories/mongodb /MongoAlbumRepository.java. В компоненте «Репозиторий» будет использоваться компонент MongoDbFactory. –

+0

Да, что примеры, которые я видел, Где я могу получить доступ к сохраненным данным? Например, на локальной машине я могу использовать командную строку db.collection.find(), и она запрашивает все мои значения. Как я могу сделать то же самое для mongo-cloud? \ – Jesse