Déployer une application Spring Boot sur Cloud Foundry

1. Vue d'ensemble

Le déploiement d'une application Spring Boot sur Cloud Foundry est un exercice simple. Dans ce didacticiel, nous allons vous montrer comment procéder.

2. Dépendances de Spring Cloud

Étant donné que ce projet nécessitera de nouvelles dépendances pour le projet Spring Cloud, nous ajouterons la nomenclature des dépendances Spring Cloud:

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

Nous pouvons trouver la dernière version de la bibliothèque spring-cloud-dependencies sur Maven Central.

À présent, nous souhaitons conserver une version distincte pour Cloud Foundry, nous allons donc créer un profil nommé cloudfoundry dans le Maven pom.xml.

Nous ajouterons également des exclusions de compilateur et le plugin Spring Boot pour configurer le nom du package:

   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     

Nous voulons également exclure les fichiers spécifiques au cloud de la construction normale, nous ajoutons donc une exclusion de profil global au plugin du compilateur Maven:

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

Ensuite, nous devons ajouter les bibliothèques Spring Cloud Starter et Spring Cloud Connectors, qui prennent en charge Cloud Foundry:

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

3. Configuration de Cloud Foundry

Pour suivre ce didacticiel, nous devons nous inscrire à un essai ici ou télécharger l'environnement de développement préconfiguré pour Native Linux ou Virtual Box.

De plus, la CLI Cloud Foundry doit être installée. Les instructions sont ici.

Après l'enregistrement auprès d'un fournisseur Cloud Foundry, l'URL de l'API sera mise à disposition (vous pouvez y revenir en suivant l' option Outils sur le côté gauche).

Le conteneur d'applications nous permet de lier des services à des applications. Ensuite, connectons-nous à l'environnement Cloud Foundry:

cf login -a 

Cloud Foundry Marketplace est un catalogue de services tels que les bases de données, la messagerie, la messagerie électronique, la surveillance, la journalisation et bien plus encore. La plupart des services proposent un plan gratuit ou d'essai.

Cherchons «MySQL» sur le marché et créons un service pour notre application:

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

La sortie répertorie les services avec «MySQL» dans la description. Sur PCF, le service MySQL est nommé cleardb et les plans non libres sont marqués d'un astérisque.

Ensuite, nous listons les détails d'un service en utilisant:

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

Nous créons maintenant une instance de service MySQL gratuite nommée spring-bootstrap-db :

cf create-service cleardb spark spring-bootstrap-db

4. Configuration de l'application

Ensuite, nous ajoutons une classe annotée @Configuration qui étend AbstractCloudConfig pour créer un DataSource dans le package nommé org.baeldung.cloud.config :

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

L'ajout de @Profile («cloud») garantit que le Cloud Connector n'est pas actif lorsque nous effectuons des tests locaux. Nous ajoutons également @ActiveProfiles (profiles = {“local”}) aux tests d'intégration.

Ensuite, créez l'application avec:

mvn clean install spring-boot:repackage -P cloudfoundry

De plus, nous devons fournir un fichier manifest.yml pour lier le service à l'application.

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

N'oubliez pas de supprimer l'application lorsque nous n'en avons plus besoin:

cf delete spring-cloud-bootstrap-cloudfoundry

7. Conclusion

Dans cet article, nous avons couvert les bibliothèques Spring Cloud qui simplifient le développement d'une application cloud native à l'aide de Spring Boot. Le déploiement avec la CLI Cloud Foundry est bien documenté ici.

Des plugins supplémentaires pour la CLI sont disponibles dans le référentiel de plugins.

Le code source complet de nos exemples ici est, comme toujours, sur GitHub.