Distribuzione di un'applicazione Spring Boot su Cloud Foundry

1. Panoramica

La distribuzione di un'applicazione Spring Boot su Cloud Foundry è un semplice esercizio. In questo tutorial ti mostreremo come farlo.

2. Dipendenze Spring Cloud

Poiché questo progetto richiederà nuove dipendenze per il progetto Spring Cloud, aggiungeremo la distinta componenti Spring Cloud Dependencies:

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

Possiamo trovare l'ultima versione della libreria spring-cloud-dependencies su Maven Central.

Ora vogliamo mantenere una build separata per Cloud Foundry, quindi creeremo un profilo denominato cloudfoundry nel Maven pom.xml.

Aggiungeremo anche esclusioni del compilatore e il plug-in Spring Boot per configurare il nome del pacchetto:

   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     

Vogliamo anche escludere i file specifici del cloud dalla normale build, quindi aggiungiamo un'esclusione del profilo globale al plug-in del compilatore Maven:

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

Quindi, dobbiamo aggiungere le librerie Spring Cloud Starter e Spring Cloud Connectors, che forniscono supporto per Cloud Foundry:

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

3. Configurazione Cloud Foundry

Per seguire questo tutorial, dobbiamo registrarci per una versione di prova qui o scaricare l'ambiente di sviluppo preconfigurato per Native Linux o Virtual Box.

Inoltre, è necessario installare la CLI Cloud Foundry. Le istruzioni sono qui.

Dopo la registrazione con un provider Cloud Foundry, l'URL dell'API sarà reso disponibile (puoi tornare ad esso seguendo l' opzione Strumenti sul lato sinistro).

Il contenitore dell'applicazione ci consente di associare i servizi alle applicazioni. Successivamente, accediamo all'ambiente Cloud Foundry:

cf login -a 

Il Cloud Foundry Marketplace è un catalogo di servizi come database, messaggistica, posta elettronica, monitoraggio, registrazione e molto altro ancora. La maggior parte dei servizi fornisce un piano gratuito o di prova.

Cerchiamo "MySQL" nel Marketplace e creiamo un servizio per la nostra applicazione:

cf marketplace | grep MySQL
> cleardb spark, boost*, amp*, shock* Highly available MySQL for your Apps. 

L'output elenca i servizi con "MySQL" nella descrizione. Su PCF il servizio MySQL si chiama cleardb e i piani non liberi sono contrassegnati da un asterisco.

Successivamente, elenchiamo i dettagli di un servizio utilizzando:

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

Ora creiamo un'istanza del servizio MySQL gratuita denominata spring-bootstrap-db :

cf create-service cleardb spark spring-bootstrap-db

4. Configurazione dell'applicazione

Successivamente, aggiungiamo una classe annotata @Configuration che estende AbstractCloudConfig per creare un DataSource nel pacchetto denominato org.baeldung.cloud.config :

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

L'aggiunta di @Profile ("cloud") garantisce che il connettore cloud non sia attivo quando eseguiamo test locali. Aggiungiamo anche @ActiveProfiles (profiles = {“local”}) ai test di integrazione.

Quindi crea l'applicazione con:

mvn clean install spring-boot:repackage -P cloudfoundry

Inoltre, dobbiamo fornire un file manifest.yml , per associare il servizio all'applicazione.

We usually place the manifest.yml file in the project folder but in this case, we'll create a cloudfoundry folder since we're going to demonstrate deploying to multiple cloud-native providers:

--- 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. Deployment

Deploying the application is now as easy as:

cd cloudfoundry cf push

Cloud Foundry will use the Java buildpack to deploy the application and create a random route to the application.

We can view the last few entries in the log file using:

cf logs spring-boot-bootstrap --recent

Or we can tail the log file:

cf logs spring-boot-bootstrap

Finally, we need the route name to test the application:

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 

Executing the following command will add a new book:

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" 

And this command will list all books:

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. Scaling the Application

Lastly, scaling an application on Cloud Foundry is as simple as using the scale command:

cf scale spring-cloud-bootstrap-cloudfoundry  Options: -i  -m  # Like 512M or 1G -k  # Like 1G or 2G -f # Force restart without prompt

Ricordati di eliminare l'applicazione quando non ne abbiamo più bisogno:

cf delete spring-cloud-bootstrap-cloudfoundry

7. Conclusione

In questo articolo, abbiamo trattato le librerie Spring Cloud che semplificano lo sviluppo di un'applicazione nativa per il cloud utilizzando Spring Boot. La distribuzione con la CLI di Cloud Foundry è ben documentata qui.

Plugin aggiuntivi per la CLI sono disponibili nel repository dei plugin.

Il codice sorgente completo dei nostri esempi qui è, come sempre, su GitHub.