Этот пост поможет вам создать веб-приложение Spring 3.1 с использованием MongoDB на Cloud Foundry. Помимо продвижения в Cloud Foundry, вы также сможете разрабатывать в своей локальной среде с экземпляром MongoDB.
цели
Целью публикации этого блога будет создание приложения локально, а затем публикация в локальном экземпляре Cloud Foundry. Мы будем использовать среду выполнения Cloud Foundry и новые Spring Profiles.
Настроить
- Создайте учетную запись в Cloud Foundry ( https://www.cloudfoundry.com/micro ).
- Следуйте инструкциям по настройке собственного Micro Cloud
- Я использую плеер VMWare
- Проверьте «vmc info», что консоль микро-облака соответствует
- Загрузите MongoDB (как минимум версия 2.0)
- Установите и ознакомьтесь с Maven 3 ( http://maven.apache.org )
- Ознакомьтесь с Spring 3.1, Spring Data и Spring MongoDB
- Клонируйте или загрузите исходный код ( https://github.com/mike-ensor/first-cloud-app )
- Запустите приложение локально с помощью:
1
mvn clean
package
cargo:run -DskipTests
- Зайдите на http: // localhost: 8080 / home
профили
В Spring 3.1 появились новые профили среды, которые позволяют разработчику активировать группы компонентов на основе параметра среды. Я обнаружил несколько « ошибок », один из которых — недокументированный заказ бинов с использованием профилей.
Взгляните на data-services.xml . Обратите внимание, как MongoTemplate определяется перед. Это противоречит моей интуиции, потому что MongoTemplate берет ссылку на объект MongoFactory, который определен ниже определения MongoTemplate.
Вторая «ошибка» возникла, когда и где установить параметр для включения профилей Spring. В документации и блогах прямо не упоминается, что разработчик должен указать активный профиль. Из документации вытекает, что « default » было активным по умолчанию, но это не так. Чтобы профиль по умолчанию был активным, я добавил его в качестве системного свойства в настройках своего груза. (если это свойство системной среды, не стесняйтесь устанавливать его в любом месте или любым другим способом). Посмотрите на файл pom.xml в строке 40 для локального свойства Maven, а затем в строке 253 для устанавливаемой переменной среды.
Местное развитие против облачного развития
Одна из основных целей взаимодействия с Cloud Foundry — это то, что я хотел, чтобы локальная среда разработки ускорила и упростила разработку, а также уменьшила сложность с помощью отладки. Обратите внимание, что в
В data-services.xml есть «облачный» профиль и «default». Смысл профиля «по умолчанию» состоит в том, чтобы иметь bean-компоненты, созданные в локальной среде. Вы можете видеть, что существует два определения MongoFactory, одно из которых использует пространство имен Spring Data MongoDB XML, а другое — пространство имен CloudFoundry Runtime. Я не буду рассказывать, почему они работают так, как они работают, поэтому, если вам нужна информация, обратитесь к http://blog.springsource.org/2011/04/12/cloud-foundry-for-spring-developers/ и http://blog.springsource.org/2011/11/09/using-cloud-foundry-services-with-spring-applications-part-3-the-cloud-namespace/
Толчок к литейному облаку
Теперь, когда у вас есть локальный запущенный экземпляр веб-приложения, вы заметите, что артефакт называется « first-cloud-app.war », который вы можете найти в папке «/ target». Это проблема при отправке на экземпляр Cloud Foundry, поскольку имя не может содержать никаких буквенных символов. Инструмент vmc Cloud Foundry создан на основе проекта с открытым исходным кодом VCAP, который отвечает за службы PaaS с открытым исходным кодом. Другой сервис PaaS включает в себя App Fog, который позволяет вам в основном использовать те же команды, но заменить «vmc» на «af». Оба сервиса становятся жертвами проблемы именования.
Чтобы обойти проблему именования, я создал облако профилей Maven, которое создает артефакт WAR как mikeensor.war. Пожалуйста, измените это, чтобы соответствовать имени вашего приложения, так как у вас не будет пользователя / пароля для публикации (или DNS) для публикации на моем микроэкземпляре. Имя должно соответствовать шаблону URL http: // < applicationname >. .cloudfoundry.me.
Чтобы опубликовать в своем локальном облачном литейном микроэкземпляре, перейдите в корневую папку и введите следующее. (это предполагает, что ваш микроэкземпляр работает и нет «красных» ошибок.
1
2
|
mvn clean package -Pcloud vmc push <application name> -path target/ |
(если вы уже нажали раньше, вам нужно будет набрать:
1
|
vmc update <application name> -path target/ |
Примечание. Можно использовать плагин Maven для Cloud Foundry, однако я до сих пор не смог заставить его работать без изменения названия артефакта. Включение и подключение к услугам
Вы должны создать сервис (ы), чтобы ваше приложение могло связываться с источником данных. Приложение VCAP (vmc) управляет работой конфигурации при загрузке приложения в Cloud Foundry. Это делается через переменную среды, которая используется в элементе конфигурации пространства имен.
В моем примере я создал сервис MongoDB, набрав:
1
|
vmc create-service mongodb --name <what you want to call your instance> |
Я назвал мой «второй» (потому что я создал первый), и вы увидите, что в data-services.xml облачная XML-конфигурация ссылается на имя службы.
Обратите внимание, что если у вас есть несколько экземпляров MongoDB, вам нужно будет выполнить некоторые настройки Spring (@Qualifier), когда вы хотите использовать разные экземпляры. Это не охватывается этой публикацией в блоге.
Теперь вам нужно будет «привязать» сервис к вашему приложению. Это можно сделать, набрав:
1
|
vmc bind-service <name above> <application name> |
Тестирование это
Вы должны быть в состоянии перейти на http: // . .cloudfoundry.me / home (пример: http://mikeensor.mikeensor.cloudfoundry.me/home)
Поздравляем! Вы должны были не только успешно развернуть приложение Cloud Foundry (микроэкземпляр), привязанное к экземпляру MongoDB, но и иметь возможность работать в вашей локальной среде! По мере того, как у меня будет время, я постараюсь добавить более подробные функции, такие как несколько типов хранилищ, и размещать другие «ошибки» по мере их нахождения.
Ссылка: Spring 3.1 + Cloud Foundry + Local Development от нашего партнера JCG Майка в блоге сайта Майка .