Развертывание приложения Spring Boot в Cloud Foundry

Развертывание приложения 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.