Spring-Boot-App mit Cloud SQL verbinden

Spring-Boot-App mit Cloud SQL verbinden

Informationen zu diesem Codelab

subjectZuletzt aktualisiert: Apr. 22, 2020
account_circleVerfasst von einem Google-Mitarbeiter

1. Hinweis

Cloud SQL ist ein vollständig verwalteter Datenbankdienst, mit dem Sie Ihre relationalen Datenbanken in Google Cloud bequem einrichten, verwalten und verwalten können. Sie können Cloud SQL mit Cloud SQL for MySQL oder Cloud SQL for PostgreSQL verwenden.

In diesem Codelab erfahren Sie, wie Sie eine Cloud SQL for MySQL-Instanz einrichten und eine Spring Boot-App aktualisieren, um die Cloud SQL-Instanz als Back-End-Speicher zu verwenden. Spring Boot Starter für Google Cloud SQL bietet eine automatisch konfigurierte DataSource, mit der Sie Cloud SQL mit minimalen Änderungen an Ihrem Code nutzen können. In diesem Codelab wird der Spring Petclinic-Quellcode verwendet.

Voraussetzungen

  • Kenntnisse in der Programmiersprache Java und in Tools
  • Kenntnisse in standardmäßigen Linux-Texteditoren wie Vim, Emacs und nano

Aufgabe

  • Cloud SQL in der Spring Boot App verwenden

Voraussetzungen

2. Einrichtung und Anforderungen

Umgebung im eigenen Tempo einrichten

  1. Melden Sie sich in der Cloud Console an und erstellen Sie ein neues Projekt oder verwenden Sie ein vorhandenes. Wenn Sie noch kein Gmail- oder G Suite-Konto haben, müssen Sie eins erstellen.

Notieren Sie sich die Projekt-ID, also den projektübergreifend nur einmal vorkommenden Namen eines Google Cloud-Projekts. Der oben angegebene Name ist bereits vergeben und kann leider nicht mehr verwendet werden. In diesem Codelab wird sie später als PROJECT_ID bezeichnet.

  1. Als Nächstes müssen Sie in der Cloud Console die Abrechnung aktivieren, um Google Cloud-Ressourcen zu nutzen.

Das Durcharbeiten dieses Codelabs sollte nicht mehr als ein paar Euro kosten. Es kann aber auch sein, dass du mehr Ressourcen benötigst oder wenn du sie nicht mehr nutzen möchtest.

Neuen Google Cloud-Nutzern steht ein kostenloser Testzeitraum im Wert von 300 $ zur Verfügung.

Cloud Shell aktivieren

  1. Klicken Sie in der Cloud Console auf Cloud Shell aktivieren.

Wenn Sie Cloud Shell noch nie gestartet haben, sehen Sie einen Zwischenbildschirm („Below the fold“ (mit Scrollen sichtbar) mit einer Beschreibung, worum es sich dabei handelt. Klicken Sie in diesem Fall auf Weiter. In diesem Fall wird es nicht wieder angezeigt. So sieht der einmalige Bildschirm aus:

Die Bereitstellung und Verbindung mit Cloud Shell dauert nur wenige Minuten.

Diese virtuelle Maschine verfügt über sämtliche Entwicklertools, die Sie benötigen. Es bietet ein 5-GB-Basisverzeichnis und wird in Google Cloud ausgeführt, was die Netzwerkleistung und Authentifizierung erheblich verbessert. In diesem Codelab lassen sich viele oder sogar alle Aufgaben ganz einfach über einen Browser oder Ihr Chromebook erledigen.

Sobald Sie mit Cloud Shell verbunden sind, sollten Sie sehen, dass Sie bereits authentifiziert sind und dass das Projekt bereits auf Ihre Projekt-ID festgelegt ist.

  1. Führen Sie in Cloud Shell den folgenden Befehl aus, um zu bestätigen, dass Sie authentifiziert sind:
gcloud auth list

Befehlsausgabe

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
gcloud config list project

Befehlsausgabe

[core]
project = <PROJECT_ID>

Ist dies nicht der Fall, können Sie die Einstellung mit diesem Befehl vornehmen:

gcloud config set project <PROJECT_ID>

Befehlsausgabe

Updated property [core/project].

3. Cloud SQL for MySQL-Instanz einrichten

  1. Nach dem Start von Cloud Shell können Sie über die Befehlszeile eine neue Cloud SQL-Instanz erstellen:
$ gcloud sql instances create my-instance

Wenn der Vorgang abgeschlossen ist, kann die Instanz verwendet werden.

  1. Erstellen Sie nun eine Datenbank, die Sie für die Petclinic-App verwenden werden:
$ gcloud sql databases create petclinic --instance my-instance

Sie können die Instanz auch über die Cloud Console aufrufen und konfigurieren.

  1. Rufen Sie den Namen der Instanzverbindung im Format project-id:zone-id:instance-id ab. Führen Sie dazu den folgenden Befehl aus. Du benötigst sie später, um deine Spring Boot-App zu konfigurieren.
$ gcloud sql instances describe my-instance |grep connectionName

4. Petclinic-Anwendung lokal klonen und testen

  1. Klonen und testen Sie jetzt die Petclinic-Anwendung lokal.
$ git clone https://github.com/spring-projects/spring-petclinic
$ cd spring-petclinic
$ ./mvnw spring-boot:run
  1. Klicken Sie in Cloud Shell auf Webvorschau und wählen Sie dann Vorschau auf Port 8080 aus.

Sie sollten die Startseite von Petclinic sehen, wie hier in Ihrem Browser angezeigt:

  1. Probieren Sie es aus und fügen Sie Daten hinzu. Die Anwendung verwendet eine In-Memory-HyperSQL-Datenbank. Sie wechseln nun von HyperSQL zur Cloud SQL-Datenbank.

5. Cloud SQL in Petclinic verwenden

Maven-pom.xml-Datei aktualisieren

Aktualisiere die pom.xml-Datei wie hier gezeigt. Der Starter bietet ein automatisch konfiguriertes DataSource-Objekt, das mit Ihrer Cloud SQL-Datenbank verbunden ist. Sie können die Datei mit Vim, Nano oder Emacs bearbeiten.

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" ...>
    ...
   
<!-- Add Spring Cloud GCP Dependency BOM -->
   
<dependencyManagement>
       
<dependencies>
         
<dependency>
         
<groupId>org.springframework.cloud</groupId>
         
<artifactId>spring-cloud-gcp-dependencies</artifactId>
         
<version>1.0.0.RC1</version>
         
<type>pom</type>
         
<scope>import</scope>
         
</dependency>
     
</dependencies>
   
</dependencyManagement>
   
<dependencies>
      ...
     
<!-- Add CloudSQL Starter for MySQL -->
     
<dependency>
       
<groupId>org.springframework.cloud</groupId>
       
<artifactId>spring-cloud-gcp-starter-sql-mysql</artifactId>
     
</dependency>
      ...
   
</dependencies>
   
<repositories>
     
<!-- Use Spring Milestone Repository -->
     
<repository>
       
<id>repository.spring.milestone</id>
       
<name>Spring Milestones Repository</name>
       
<url>http://repo.spring.io/milestone</url>
     
</repository>
   
</repositories>
</project>

application-mysql.properties aktualisieren

  1. Ersetze den Inhalt von src/main/resources/application-mysql.properties durch die folgenden Properties. Sie müssen den Namen der Instanzverbindung aus dem vorherigen Schritt festlegen.

src/main/resources/application-mysql.properties

database=mysql

# Delete the rest of the original content of the file and replace with the following:
spring
.cloud.gcp.sql.database-name=petclinic
spring
.cloud.gcp.sql.instance-connection-name=YOUR_CLOUD_SQL_INSTANCE_CONNECTION_NAME

# Initialize the database since the newly created Cloud SQL database has no tables. The following flag is for Spring Boot 2.
spring
.datasource.initialization-mode=always
  1. Abschließend aktivieren Sie ein Cloud SQL for MySQL-Profil in der Spring Boot App, indem Sie die mysql-Property zur application.properties' spring.profiles.active hinzufügen:

src/main/resources/application.properties

# Keep the content of the file the same
...

# In the last line, add mysql to the spring.profiles.active property
spring
.profiles.active=mysql

6. Anwendung in Cloud Shell ausführen

  1. Du kannst die Spring Boot App ganz normal mit dem Spring Boot-Plug-in starten:
$ ./mvnw -DskipTests spring-boot:run
  1. Klicken Sie nach dem Start der App in der Cloud Shell-Symbolleiste auf Webvorschau und wählen Sie Vorschau auf Port 8080 aus.

Sie sollten nun die Spring Petclinic-Startseite sehen (wie hier in Ihrem Browser):

  1. Fügen Sie einen Eintrag für den Haustierbesitzer hinzu.

Optional: Daten in Cloud SQL beibehalten

Sie können prüfen, ob die von Ihnen eingegebenen Daten wie hier gezeigt in Cloud SQL gespeichert wurden. Drücken Sie die Eingabetaste auf dem Macintosh, wenn Sie zur Eingabe eines Passworts aufgefordert werden.

$ gcloud sql connect my-instance -u root
Whitelisting your IP for incoming connection for 5 minutes...done.
Enter password: <Press Enter, there is no password by default>
...
mysql> use petclinic;
mysql> select * from owners;
  

Optional: Cloud SQL-Instanz löschen

Nachdem Sie die Anwendung beendet haben, können Sie die Cloud SQL-Instanz mit dem folgenden Befehl löschen:

$ gcloud sql instances delete my-instance 

7. Glückwunsch

Sie wissen jetzt, wie Sie in der Spring Boot-App eine Verbindung zu Cloud SQL herstellen.

Weitere Informationen