Розгортання програми Spring Boot на Cloud Foundry

1. Огляд

Розгортання програми Spring Boot на Cloud Foundry - це проста вправа. У цьому підручнику ми покажемо вам, як це зробити.

2. Весняні хмарні залежності

Оскільки для цього проекту потрібні нові залежності для проекту Spring Cloud, ми додамо специфікацію Spring Cloud Dependencies:

   org.springframework.cloud spring-cloud-dependencies Greenwhich.RELEASE pom import   

Ми можемо знайти останню версію бібліотеки залежностей spring-cloud у Maven Central.

Тепер ми хочемо підтримувати окрему збірку для Cloud Foundry, тому ми створимо профіль з назвою cloudfoundry у Maven pom.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. Конфігурація хмарного ливарного виробництва

Щоб пройти цей посібник, нам потрібно зареєструватися для ознайомлення тут або завантажити попередньо налаштоване середовище розробки для Native Linux або Virtual Box.

Крім того, потрібно встановити CLI Cloud Foundry. Інструкції тут.

Після реєстрації у постачальника послуг Cloud Foundry URL-адреса API буде доступною (ви можете повернутися до неї, скориставшись опцією Інструменти зліва).

Контейнер додатків дозволяє нам прив'язувати служби до програм. Далі увійдемо в середовище Cloud Foundry:

cf login -a 

Cloud Foundry Marketplace - це каталог послуг, таких як бази даних, обмін повідомленнями, електронна пошта, моніторинг, реєстрація та багато іншого. Більшість послуг надають безкоштовний або пробний план.

Давайте шукатимемо на 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 в пакеті з іменем org.baeldung.cloud.config :

@Configuration @Profile("cloud") public class CloudDataSourceConfig extends AbstractCloudConfig { @Bean public DataSource dataSource() { return connectionFactory().dataSource(); } }

Додавання @Profile (“хмара”) гарантує, що Cloud Connector не активний, коли ми проводимо локальне тестування. Ми також додаємо @ActiveProfiles (профілі = {“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 buildpack для розгортання програми та створення випадкового маршруту до програми.

Ми можемо переглянути останні декілька записів у файлі журналу, використовуючи:

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"}' \ ///api/books #OR http POST ///api/books author="Iain M. Banks" 

І ця команда перелічить усі книги:

curl -i ///api/books #OR http ///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 просте, як за допомогою команди масштабування :

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. Розгортання з Cloud Foundry CLI тут добре задокументовано.

Додаткові плагіни для CLI доступні у сховищі плагінів.

Повний вихідний код наших прикладів тут, як завжди, закінчений на GitHub.