Bereitstellen einer Spring Boot-Anwendung für Cloud Foundry

Bereitstellen einer Spring Boot-Anwendung für Cloud Foundry

1. Überblick

Das Bereitstellen einer Spring Boot-Anwendung in Cloud Foundry ist eine einfache Übung. In diesem Tutorial zeigen wir Ihnen, wie es geht.

2. Spring Cloud-Abhängigkeiten

Da für dieses Projekt neue Abhängigkeiten für das Spring Cloud-Projekt erforderlich sind, fügen wir die Stückliste für Spring Cloud-Abhängigkeiten hinzu:


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

Wir finden die neueste Version derspring-cloud-dependencies-Bibliothek aufMaven Central.

Jetzt möchten wir einen separaten Build für die Cloud Foundry verwalten, sodass wir in den Mavenpom.xml. ein Profil mit dem Namencloudfoundry erstellen

Wir werden auch Compiler-Ausschlüsse und das Spring Boot-Plugin hinzufügen, um den Namen des Pakets zu konfigurieren:


    
        
            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
                
            
        
    

Wir möchten auch die cloudspezifischen Dateien vom normalen Build ausschließen, also fügen wir dem Maven-Compiler-Plugin einen globalen Profilausschluss hinzu:


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

Dann müssen wir die Bibliotheken Spring Cloud Starter und Spring Cloud Connectors hinzufügen, die Unterstützung für Cloud Foundry bieten:


    org.springframework.cloud
    spring-cloud-starter


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

3. Cloud Foundry-Konfiguration

Um dieses Tutorial durchzuarbeiten, müssen wir uns für eine Testversionhere registrieren oder die vorkonfigurierte Entwicklungsumgebung fürNative Linux oderVirtual Box herunterladen.

Außerdem muss die Cloud Foundry CLI installiert sein. Anweisungen sindhere.

Nach der Registrierung bei einem Cloud Foundry-Anbieter wird die API-URL zur Verfügung gestellt (Sie können darauf zurückgreifen, indem Sie der OptionTools auf der linken Seite folgen).

Mit dem Anwendungscontainer können wir Dienste an Anwendungen binden. Als Nächstes melden wir uns bei der Cloud Foundry-Umgebung an:

cf login -a 

The Cloud Foundry Marketplace is a catalog of services wie Datenbanken, Messaging, E-Mail, Überwachung, Protokollierung und vieles mehr. Die meisten Dienste bieten einen kostenlosen oder Testplan.

Durchsuchen wir den Marktplatz nach "MySQL" und erstellen einen Dienst für unsere Anwendung:

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

Die Ausgabe listet die Dienste mit "MySQL" in der Beschreibung auf. Auf PCF heißt der MySQL-Dienstcleardb, und nicht freie Pläne sind mit einem Sternchen gekennzeichnet.

Als Nächstes listen wir die Details eines Dienstes auf, indem wir verwenden:

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

Jetzt erstellen wir eine kostenlose MySQL-Dienstinstanz mit dem Namenspring-bootstrap-db:

cf create-service cleardb spark spring-bootstrap-db

4. Anwendungskonfiguration

Als nächstes fügen wir eine mit@Configuration kommentierte Klasse hinzu, dieAbstractCloudConfig erweitert, um eineDataSource in für das Paket mit dem Namenorg.example.cloud.config zu erstellen:

@Configuration
@Profile("cloud")
public class CloudDataSourceConfig extends AbstractCloudConfig {

    @Bean
    public DataSource dataSource() {
        return connectionFactory().dataSource();
    }
}

Durch Hinzufügen von@Profile(“cloud”) wird sichergestellt, dass der Cloud Connector bei lokalen Tests nicht aktiv ist. Wir fügen den Integrationstests auch@ActiveProfiles(profiles = \{“local”}) hinzu.

Dann erstellen Sie die Anwendung mit:

mvn clean install spring-boot:repackage -P cloudfoundry

Außerdem müssen wir einemanifest.yml-Datei bereitstellen, um den Dienst an die Anwendung zu binden.

Normalerweise platzieren wir diemanifest.yml-Datei im Projektordner. In diesem Fall erstellen wir jedoch einencloudfoundry-Ordner, da wir die Bereitstellung bei mehreren Cloud-nativen Anbietern demonstrieren werden:

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

Die Bereitstellung der Anwendung ist jetzt so einfach wie:

cd cloudfoundry
cf push

Cloud Foundry verwendet das Java-Buildpack, um die Anwendung bereitzustellen und eine zufällige Route zur Anwendung zu erstellen.

Die letzten Einträge in der Protokolldatei können wie folgt angezeigt werden:

cf logs spring-boot-bootstrap --recent

Oder wir können die Protokolldatei abschließen:

cf logs spring-boot-bootstrap

Schließlich benötigen wir den Routennamen, um die Anwendung zu testen:

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

Durch Ausführen des folgenden Befehls wird ein neues Buch hinzugefügt:

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"

Und dieser Befehl listet alle Bücher auf:

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. Skalieren der Anwendung

Schließlich ist das Skalieren einer Anwendung in Cloud Foundry so einfach wie das Verwenden des Befehlsscale:

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

Denken Sie daran, die Anwendung zu löschen, wenn wir sie nicht mehr benötigen:

cf delete spring-cloud-bootstrap-cloudfoundry

7. Fazit

In diesem Artikel haben wir die Spring Cloud-Bibliotheken behandelt, die die Entwicklung einer cloud-nativen Anwendung mit Spring Boot vereinfachen. Die Bereitstellung mit der Cloud Foundry-CLI ist inhere gut dokumentiert.

Zusätzliche Plugins für die CLI sind inplugin repository verfügbar.

Der vollständige Quellcode unserer Beispiele hier ist wie immerover on GitHub.