Spring boot inject источник данных mongodb

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

cf create-service MongoService default my-mongo
cf push myapp --no-start
cf bind-service myapp my-mongo
cf start myapp

Детали подключения к экземпляру mongodb находятся в переменной среды VCAP_SERVICES. При развертывании моего приложения в Cloudfoundry Spring Boot пытается получить доступ к mongodb на localhost: 27017 и, очевидно, терпит неудачу.

Я хотел бы проанализировать переменную среды VCAP_SERVICES, построить из нее некоторые детали подключения mongodb и предоставить это как компонент Spring. Какой класс мне следует использовать для этих деталей конфигурации?


person user152468    schedule 01.06.2016    source источник
comment
Я решил проблему, зарегистрировав класс конфигурации, расширяющий AbstractMongoConfiguration. В этом классе переменная среды vcap_services анализируется и вставляется в объект Mongo, возвращаемый методом override mongo ().   -  person user152468    schedule 02.06.2016
comment
Пожалуйста, расскажите подробнее, как вы это исправили. У меня та же проблема.   -  person Jesse    schedule 21.12.2016


Ответы (2)


С Spring Boot вам не нужно вручную разбирать VCAP_SERVICES. Если вы используете MongoTemplate или MongoRepository, он автоматически подключится к привязанному экземпляру.

Убедитесь, что в вашем pom.xml как родительский артефакт указан spring-boot-starter-parent.

Вы можете добавить следующее в свой pom.xml, чтобы убедиться, что код облачного коннектора получен:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-cloud-connectors</artifactId>
    </dependency>

Конечно, вам также понадобится зависимость MongoDB Spring Data:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-mongodb</artifactId>
    </dependency>
person Corby Page    schedule 01.06.2016
comment
Я пробовал именно это, но приложение все еще пытается подключиться к localhost: 27017. - person user152468; 01.06.2016
comment
При добавлении этого в POM мне нужно добавить какие-либо другие аннотации, чтобы это работало? У меня та же проблема, что и у пользователя 152469 - person Jesse; 21.12.2016
comment
Убедитесь, что вы включили зависимость данных mongodb. groupId: org.springframework.boot artifactId: spring-boot-starter-data-mongodb - person Corby Page; 23.12.2016

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

Для меня все сводилось к правильному определению следующих свойств:

spring:
  datasource:
    url: jdbc:mysql://${vcap.services.mydb.credentials.host}:${vcap.services.mydb.credentials.port}/${vcap.services.mydb.credentials.name}
    driver-class-name: com.mysql.jdbc.Driver
    username: ${vcap.services.mydb.credentials.user}
    password: ${vcap.services.mydb.credentials.password}
person Lech Migdal    schedule 02.06.2016