Déploiement d’une application Spring Boot sur une fonderie dans le cloud

Déploiement d'une application Spring Boot sur une fonderie dans le cloud

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 allons ajouter la nomenclature des dépendances Spring Cloud:


    
        
            org.springframework.cloud
            spring-cloud-dependencies
            Finchley.SR1
            pom
            import
        
    

Nous pouvons trouver la dernière version de la bibliothèquespring-cloud-dependencies surMaven Central.

Maintenant, nous voulons conserver une version distincte pour Cloud Foundry, nous allons donc créer un profil nommécloudfoundry dans les Mavenpom.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 souhaitons également exclure les fichiers spécifiques au cloud de la construction normale afin d'ajouter une exclusion de profil global au plug-in 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 essaihere ou télécharger l'environnement de développement préconfiguré pourNative Linux ouVirtual Box.

En outre, la CLI de Cloud Foundry doit être installée. Les instructions sonthere.

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'optionTools 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 

The Cloud Foundry Marketplace is a catalog of services comme les bases de données, la messagerie, le courrier électronique, la surveillance, la journalisation et bien plus encore. La plupart des services proposent un plan gratuit ou à l'essai.

Cherchons "MySQL" sur la place de 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éespring-bootstrap-db:

cf create-service cleardb spark spring-bootstrap-db

4. Configuration d'application

Ensuite, nous ajoutons une classe annotée@Configuration qui étendAbstractCloudConfig pour créer unDataSource in le package nomméorg.example.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, construisez l'application avec:

mvn clean install spring-boot:repackage -P cloudfoundry

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

Nous plaçons généralement le fichiermanifest.yml dans le dossier du projet, mais dans ce cas, nous allons créer un dossiercloudfoundry car nous allons démontrer le déploiement sur plusieurs fournisseurs cloud natifs:

---
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. Déploiement

Le déploiement de l'application est désormais aussi simple que:

cd cloudfoundry
cf push

Cloud Foundry utilisera le buildpack Java pour déployer l'application et créer un itinéraire aléatoire vers l'application.

Nous pouvons afficher les dernières entrées du fichier journal en utilisant:

cf logs spring-boot-bootstrap --recent

Ou nous pouvons suivre le fichier journal:

cf logs spring-boot-bootstrap

Enfin, nous avons besoin du nom de la route pour tester l'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

L'exécution de la commande suivante ajoutera un nouveau livre:

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"

Et cette commande listera tous les livres:

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. Mise à l'échelle de l'application

Enfin, la mise à l'échelle d'une application sur Cloud Foundry est aussi simple que d'utiliser la commandescale:

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 abordé les bibliothèques Spring Cloud qui simplifient le développement d’une application native au cloud utilisant Spring Boot. Le déploiement avec la CLI Cloud Foundry est bien documentéhere.

Des plugins supplémentaires pour la CLI sont disponibles dans lesplugin repository.

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