Развертывание приложения Spring Boot в Cloud Foundry
1. обзор
Развертывание приложения Spring Boot в Cloud Foundry - это простое упражнение. В этом руководстве мы покажем вам, как это сделать.
2. Зависимости Spring Cloud
Поскольку для этого проекта потребуются новые зависимости для проекта Spring Cloud, мы добавим спецификацию Spring Cloud Dependencies:
org.springframework.cloud
spring-cloud-dependencies
Finchley.SR1
pom
import
Мы можем найти последнюю версию библиотекиspring-cloud-dependencies наMaven Central.
Теперь мы хотим сохранить отдельную сборку для Cloud Foundry, поэтому мы создадим профиль с именемcloudfoundry в Mavenpom.xml.
Мы также добавим исключения компилятора и плагин Spring Boot для настройки имени пакета:
src/main/resources
**/logback.xml
org.springframework.boot
spring-boot-maven-plugin
${project.name}-cf
org.apache.maven.plugins
maven-compiler-plugin
**/cloud/config/*.java
Мы также хотим исключить облачные файлы из обычной сборки, поэтому добавляем глобальное исключение профиля в плагин компилятора Maven:
org.apache.maven.plugins
maven-compiler-plugin
**/cloud/*.java
Затем нам нужно добавить библиотеки Spring Cloud Starter и Spring Cloud Connectors, которые обеспечивают поддержку Cloud Foundry:
org.springframework.cloud
spring-cloud-starter
org.springframework.boot
spring-boot-starter-cloud-connectors
3. Конфигурация Cloud Foundry
Чтобы пройти это руководство, нам необходимо зарегистрироваться для получения пробной версииhere или загрузить предварительно настроенную среду разработки дляNative Linux илиVirtual Box.
Кроме того, необходимо установить CLI Cloud Foundry. Инструкции:here.
После регистрации у поставщика Cloud Foundry URL-адрес API станет доступен (вы можете вернуться к нему, выбрав опциюTools слева).
Контейнер приложений позволяет нам привязывать сервисы к приложениям. Затем войдем в среду Cloud Foundry:
cf login -a
The Cloud Foundry Marketplace is a catalog of services, такие как базы данных, обмен сообщениями, электронная почта, мониторинг, ведение журнала и многое другое. Большинство услуг предоставляют бесплатный или пробный план.
Давайте поищем на Marketplace слово «MySQL» и создадим сервис для нашего приложения:
cf marketplace | grep MySQL
>
cleardb spark, boost*, amp*, shock* Highly available MySQL for your Apps.
Выходные данные перечисляют сервисы с «MySQL» в описании. В PCF служба MySQL называетсяcleardb, а несвободные планы отмечены звездочкой.
Далее мы перечислим детали услуги, используя:
cf marketplace -s cleardb
>
service plan description free or paid
spark Great for getting started and developing your apps free
boost Best for light production or staging your applications paid
amp For apps with moderate data requirements paid
shock Designed for apps where you need real MySQL reliability, power and throughput paid
Теперь мы создаем бесплатный экземпляр службы MySQL с именемspring-bootstrap-db:
cf create-service cleardb spark spring-bootstrap-db
4. Конфигурация приложения
Затем мы добавляем аннотированный класс@Configuration, который расширяетAbstractCloudConfig, чтобы создатьDataSource in пакет с именемorg.example.cloud.config:
@Configuration
@Profile("cloud")
public class CloudDataSourceConfig extends AbstractCloudConfig {
@Bean
public DataSource dataSource() {
return connectionFactory().dataSource();
}
}
Добавление@Profile(“cloud”) гарантирует, что Cloud Connector не активен, когда мы проводим локальное тестирование. Мы также добавляем@ActiveProfiles(profiles = \{“local”}) в тесты интеграции.
Затем создайте приложение с помощью:
mvn clean install spring-boot:repackage -P cloudfoundry
Кроме того, нам нужно предоставить файлmanifest.yml, чтобы привязать службу к приложению.
Обычно мы помещаем файлmanifest.yml в папку проекта, но в этом случае мы создадим папкуcloudfoundry, поскольку мы собираемся продемонстрировать развертывание для нескольких облачных провайдеров:
---
applications:
- name: spring-boot-bootstrap
memory: 768M
random-route: true
path: ../target/spring-boot-bootstrap-cf.jar
env:
SPRING_PROFILES_ACTIVE: cloud,mysql
services:
- spring-bootstrap-db
5. развертывание
Развертывание приложения теперь так же просто, как:
cd cloudfoundry
cf push
Cloud Foundry будет использовать сборку Java для развертывания приложения и создания случайного маршрута к приложению.
Мы можем просмотреть последние несколько записей в файле журнала, используя:
cf logs spring-boot-bootstrap --recent
Или мы можем привязать файл журнала:
cf logs spring-boot-bootstrap
Наконец, нам нужно имя маршрута для тестирования приложения:
cf app spring-boot-bootstrap
>
name: spring-boot-bootstrap
requested state: started
routes: spring-boot-bootstrap-delightful-chimpanzee.cfapps.io
last uploaded: Thu 23 Aug 08:57:20 SAST 2018
stack: cflinuxfs2
buildpacks: java-buildpack=v4.15-offline-...
type: web
instances: 1/1
memory usage: 768M
state since cpu memory disk
#0 running 2018-08-23T06:57:57Z 0.5% 290.9M of 768M 164.7M of 1G
Выполнение следующей команды добавит новую книгу:
curl -i --request POST \
--header "Content-Type: application/json" \
--data '{"title": "The Player of Games", "author": "Iain M. Banks"}' \
https:///api/books
#OR
http POST https:///api/books title="The Player of Games" author="Iain M. Banks"
И эта команда перечислит все книги:
curl -i https:///api/books
#OR
http https:///api/books
>
HTTP/1.1 200 OK
[
{
"author": "Iain M. Banks",
"id": 1,
"title": "Player of Games"
},
{
"author": "J.R.R. Tolkien",
"id": 2,
"title": "The Hobbit"
}
]
6. Масштабирование приложения
Наконец, масштабировать приложение в Cloud Foundry так же просто, как использовать командуscale:
cf scale spring-cloud-bootstrap-cloudfoundry
Options:
-i
-m # Like 512M or 1G
-k # Like 1G or 2G
-f # Force restart without prompt
Не забудьте удалить приложение, когда оно нам больше не нужно:
cf delete spring-cloud-bootstrap-cloudfoundry
7. Заключение
В этой статье мы рассмотрели библиотеки Spring Cloud, которые упрощают разработку облачного приложения с использованием Spring Boot. Развертывание с помощью CLI Cloud Foundry хорошо задокументированоhere.
Дополнительные плагины для CLI доступны вplugin repository.
Полный исходный код наших примеров здесь, как всегда,over on GitHub.