Implementering av en Spring Boot-applikasjon til Cloud Foundry

1. Oversikt

Å distribuere en Spring Boot-applikasjon til Cloud Foundry er en enkel øvelse. I denne veiledningen viser vi deg hvordan du gjør det.

2. Avhengighet av vårsky

Siden dette prosjektet vil kreve nye avhengigheter for Spring Cloud-prosjektet, vil vi legge til Spring Cloud Dependencies BOM:

   org.springframework.cloud vår-sky-avhengigheter Greenwhich.RELEASE pom import 

Vi finner den nyeste versjonen av vår-sky-avhengigheter bibliotek på Maven Central.

Nå vil vi opprettholde en egen versjon for Cloud Foundry, så vi oppretter en profil som heter skyfoundry i Maven pom.xml.

Vi legger også til kompilatorekskluderinger og Spring Boot-plugin for å konfigurere navnet på pakken:

   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 

Vi vil også ekskludere de skyspesifikke filene fra den vanlige bygningen, så vi legger til en global profilekskludering i Maven compiler plugin:

   org.apache.maven.plugins maven-compiler-plugin ** / cloud / *. java 

Deretter må vi legge til Spring Cloud Starter og Spring Cloud Connectors-bibliotekene, som gir støtte for Cloud Foundry:

 org.springframework.cloud spring-cloud-starter org.springframework.boot spring-boot-starter-cloud-connectors 

3. Cloud Foundry Configuration

For å gå gjennom denne veiledningen, må vi registrere deg for en prøveperiode her eller laste ned det forhåndskonfigurerte utviklingsmiljøet for Native Linux eller Virtual Box.

Videre må Cloud Foundry CLI installeres. Instruksjoner er her.

Etter registrering hos en Cloud Foundry-leverandør blir API-URL-en gjort tilgjengelig (du kan komme tilbake til den ved å følge Verktøy alternativet på venstre side).

Applikasjonsbeholderen lar oss binde tjenester til applikasjoner. Deretter, la oss logge på Cloud Foundry-miljøet:

jf innlogging -a 

Cloud Foundry Marketplace er en katalog med tjenester som databaser, meldinger, e-post, overvåking, logging og mye mer. De fleste tjenester tilbyr en gratis eller prøveplan.

La oss søke på Marketplace etter “MySQL” og opprette en tjeneste for applikasjonen vår:

cf markedsplass | grep MySQL
> cleardb gnist, boost *, amp *, shock * Svært tilgjengelig MySQL for appene dine. 

Utgangen viser tjenestene med “MySQL” i beskrivelsen. På PCF heter MySQL-tjenesten cleardb og ikke-gratis planer er merket med en stjerne.

Deretter viser vi detaljene i en tjeneste ved hjelp av:

cf markedsplass -s cleardb
> serviceplanbeskrivelse gratis eller betalt gnist Flott for å komme i gang og utvikle appene dine gratis boost Best for lettproduksjon eller iscenesettelse av applikasjoner betalt forsterker For apper med moderat datakrav betalt sjokk Designet for apper der du trenger ekte MySQL pålitelighet, strøm og gjennomstrømning

Nå oppretter vi en gratis MySQL-tjenesteinstans med navnet spring-bootstrap-db:

cf create-service cleardb gnistfjær-bootstrap-db

4. Programkonfigurasjon

Deretter legger vi til en @Konfigurasjon kommentert klasse som strekker seg Abstrakt CloudConfig å lage en Datakilde i pakken som heter org.baeldung.cloud.config:

@Configuration @Profile ("sky") offentlig klasse CloudDataSourceConfig utvider AbstractCloudConfig {@Bean public DataSource dataSource () {return connectionFactory (). DataSource (); }}

Legger til @Profile (“sky”) sørger for at Cloud Connector ikke er aktiv når vi gjør lokale tester. Vi legger også til @ActiveProfiles (profiler = {“lokal”}) til integrasjonstestene.

Bygg deretter applikasjonen med:

mvn clean install spring-boot: repackage -P cloudfoundry

Vi må også gi en manifest.yml fil for å binde tjenesten til applikasjonen.

Vi plasserer vanligvis manifest.yml filen i prosjektmappen, men i dette tilfellet oppretter vi en skyfoundry mappe siden vi skal demonstrere distribusjon til flere cloud-native-leverandører:

--- applikasjoner: - navn: spring-boot-bootstrap-minne: 768M random-route: true path: ../target/spring-boot-bootstrap-cf.jar env: SPRING_PROFILES_ACTIVE: cloud, mysql services: - spring-bootstrap -db

5. Implementering

Å implementere applikasjonen er nå så enkelt som:

cd skyfoundry cf push

Cloud Foundry vil bruke Java-byggepakken til å distribuere applikasjonen og lage en tilfeldig rute til applikasjonen.

Vi kan se de siste oppføringene i loggfilen ved å bruke:

cf logs spring-boot-bootstrap --recent

Eller vi kan hale loggfilen:

cf logs spring-boot-bootstrap

Til slutt trenger vi rutenavnet for å teste søknaden:

cf app spring-boot-bootstrap
> navn: spring-boot-bootstrap forespurt tilstand: startede ruter: spring-boot-bootstrap-delightful-chimpanzee.cfapps.io sist lastet opp: Thu 23 Aug 08:57:20 SAST 2018 stack: cflinuxfs2 buildpacks: java-buildpack = v4 .15-offline -... type: webforekomster: 1/1 minnebruk: 768M tilstand siden cpu-minnedisk # 0 kjører 2018-08-23T06: 57: 57Z 0,5% 290,9M av 768M 164,7M av 1G 

Å utføre følgende kommando vil legge til en ny bok:

curl -i --forespørsel 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" 

Og denne kommandoen vil liste opp alle bøker:

krøll -i /// api / books #OR http /// api / books
> HTTP / 1.1 200 OK [{"author": "Iain M. Banks", "id": 1, "title": "Player of Games"}, {"author": "JRR Tolkien", "id": 2, "title": "The Hobbit"}] 

6. Skalering av applikasjonen

Til slutt, skalering av et program på Cloud Foundry er så enkelt som å bruke skala kommando:

cf skala vår-sky-bootstrap-cloudfoundry Alternativer: -i -m # Like 512M eller 1G -k # Like 1G eller 2G -f # Tving omstart uten spørsmål

Husk å slette programmet når vi ikke trenger det lenger:

cf slett spring-cloud-bootstrap-cloudfoundry

7. Konklusjon

I denne artikkelen dekket vi Spring Cloud-bibliotekene som forenkler utviklingen av et skyinnfødt program ved hjelp av Spring Boot. Implementering med Cloud Foundry CLI er godt dokumentert her.

Ekstra plugins for CLI er tilgjengelige i plugin-depotet.

Den fulle kildekoden til eksemplene våre her er som alltid over på GitHub.