Spring Boot-Anwendung mit Cloud SQL verbinden

1. Hinweis

Cloud SQL ist ein vollständig verwalteter Datenbankdienst, mit dem Sie Ihre relationalen Datenbanken ganz einfach in Google Cloud einrichten, warten und verwalten können. Sie können Cloud SQL entweder 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 dann eine Spring Boot-App aktualisieren, damit sie die Cloud SQL-Instanz als Backend-Speicher verwendet. Der Spring Boot Starter für Google Cloud SQL bietet eine automatisch konfigurierte DataSource, sodass Sie Cloud SQL ganz einfach mit minimalen Änderungen an Ihrem Code nutzen können. In diesem Codelab wird der Quellcode von Spring Petclinic verwendet.

Voraussetzungen

  • Kenntnisse der Programmiersprache Java und der entsprechenden Tools
  • Kenntnisse von standardmäßigen Linux-Texteditoren wie Vim, Emacs und Nano

Aufgaben

  • Cloud SQL in Ihrer Spring Boot-App verwenden

Voraussetzungen

2. Einrichtung und Anforderungen

Umgebung zum selbstbestimmten Lernen einrichten

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Der Projektname ist der Anzeigename für die Teilnehmer dieses Projekts. Es handelt sich um einen String, der nicht von Google APIs verwendet wird. Sie können sie jederzeit aktualisieren.
  • Die Projekt-ID ist für alle Google Cloud-Projekte eindeutig und unveränderlich (kann nach dem Festlegen nicht mehr geändert werden). In der Cloud Console wird automatisch ein eindeutiger String generiert. Normalerweise ist es nicht wichtig, wie dieser String aussieht. In den meisten Codelabs müssen Sie auf Ihre Projekt-ID verweisen (in der Regel als PROJECT_ID angegeben). Wenn Ihnen die generierte ID nicht gefällt, können Sie eine andere zufällige ID generieren. Alternativ können Sie es mit einem eigenen Namen versuchen und sehen, ob er verfügbar ist. Sie kann nach diesem Schritt nicht mehr geändert werden und bleibt für die Dauer des Projekts bestehen.
  • Zur Information: Es gibt einen dritten Wert, die Projektnummer, die von einigen APIs verwendet wird. Weitere Informationen zu diesen drei Werten
  1. Als Nächstes müssen Sie die Abrechnung in der Cloud Console aktivieren, um Cloud-Ressourcen/-APIs zu verwenden. Die Durchführung dieses Codelabs kostet wenig oder gar nichts. Wenn Sie Ressourcen herunterfahren möchten, um Kosten zu vermeiden, die über diese Anleitung hinausgehen, können Sie die erstellten Ressourcen oder das Projekt löschen. Neue Google Cloud-Nutzer können am kostenlosen Testzeitraum mit einem Guthaben von 300$ teilnehmen.

Cloud Shell aktivieren

  1. Klicken Sie in der Cloud Console auf Cloud Shell aktivieren 853e55310c205094.png.

55efc1aaa7a4d3ad.png

Wenn Sie die Cloud Shell zum ersten Mal starten, wird ein Fenster mit einer Beschreibung eingeblendet. Klicken Sie in diesem Fall einfach auf Weiter.

9c92662c6a846a5c.png

Das Herstellen der Verbindung mit der Cloud Shell sollte nur wenige Augenblicke dauern.

9f0e51b578fecce5.png

Auf dieser virtuellen Maschine sind alle erforderlichen Entwicklungstools installiert. Sie bietet ein Basisverzeichnis mit 5 GB nichtflüchtigem Speicher und läuft in Google Cloud, was die Netzwerkleistung und Authentifizierung erheblich verbessert. Die meisten, wenn nicht sogar alle Aufgaben in diesem Codelab können mit einem Browser erledigt werden.

Sobald die Verbindung mit der Cloud Shell hergestellt ist, sehen Sie, dass Sie authentifiziert sind und für das Projekt Ihre Projekt-ID eingestellt ist.

  1. Führen Sie in der Cloud Shell den folgenden Befehl aus, um zu prüfen, ob 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`
  1. Führen Sie den folgenden Befehl in Cloud Shell aus, um zu bestätigen, dass der gcloud-Befehl Ihr Projekt kennt:
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. Nachdem Cloud Shell gestartet wurde, können Sie über die Befehlszeile eine neue Cloud SQL-Instanz erstellen:
$ gcloud sql instances create my-instance

Nach Abschluss dieses Vorgangs ist Ihre Instanz einsatzbereit.

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

Sie können auch über die Cloud Console auf die Instanz zugreifen und sie konfigurieren.

  1. Rufen Sie den Namen der Instanzverbindung im Format project-id:zone-id:instance-id mit dem folgenden Befehl ab. Sie benötigen sie später, um Ihre Spring Boot-App zu konfigurieren.
$ gcloud sql instances describe my-instance | grep connectionName

4. PetClinic-App lokal klonen und testen

  1. Als Nächstes klonen Sie die Petclinic-App lokal.
$ git clone https://github.com/spring-projects/spring-petclinic

$ cd spring-petclinic
  1. Achten Sie darauf, dass die richtige Java-Version festgelegt ist, und führen Sie die Petclinic-App lokal aus.
$ export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64/

$ ./mvnw spring-boot:run
  1. Klicken Sie in Cloud Shell auf Webvorschau1a94d5bd10bfc072.png und wählen Sie dann Vorschau auf Port 8080 aus.

3aca52f76c6c22a3.png

In Ihrem Browser sollte die Petclinic-Startseite wie hier zu sehen angezeigt werden:

34e0d4f1e1765560.png

  1. Probieren Sie es aus und fügen Sie Daten hinzu. Die App verwendet eine speicherresidente HyperSQL-Datenbank. Sie wechseln jetzt von HyperSQL zu Cloud SQL als Datenbank.

5. Cloud SQL in Petclinic verwenden

Maven-Datei pom.xml aktualisieren

Aktualisieren Sie die Datei pom.xml wie hier gezeigt. Das Starter-Paket stellt ein automatisch konfiguriertes DataSource-Objekt bereit, um eine Verbindung zu Ihrer Cloud SQL-Datenbank herzustellen. 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>com.google.cloud</groupId>
          <artifactId>spring-cloud-gcp-dependencies</artifactId>
          <version>4.1.4</version>
          <type>pom</type>
          <scope>import</scope>
          </dependency>
      </dependencies>
    </dependencyManagement>
    <dependencies>
      ...
      <!-- Add CloudSQL Starter for MySQL -->
      <dependency>
        <groupId>com.google.cloud</groupId>
        <artifactId>spring-cloud-gcp-starter-sql-mysql</artifactId>
      </dependency>
      ...
    </dependencies>
</project>

application-mysql.properties aktualisieren

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

src/main/resources/application-mysql.properties

database=mysql

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.5+.
spring.sql.init.mode=always  

  1. Aktivieren Sie schließlich ein Cloud SQL for MySQL-Profil in der Spring Boot-App, indem Sie mysql der Eigenschaft application.propertiesspring.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. App in Cloud Shell ausführen

  1. Sie können die Spring Boot-Anwendung wie gewohnt mit dem Spring Boot-Plug-in starten:
$ ./mvnw -DskipTests spring-boot:run
  1. Wenn die App gestartet wurde, klicken Sie in der Cloud Shell-Symbolleiste auf Webvorschau1a94d5bd10bfc072.png und wählen Sie Vorschau auf Port 8080 aus.

3aca52f76c6c22a3.png

Sie sollten die Startseite von Spring Petclinic wieder in Ihrem Browser sehen, wie hier dargestellt:

34e0d4f1e1765560.png

  1. Einen Eintrag für einen Tierhalter hinzufügen

Optional: Prüfen, ob die Daten in Cloud SQL gespeichert wurden

Sie können prüfen, ob die eingegebenen Daten in Cloud SQL gespeichert wurden, wie hier gezeigt. Drücken Sie die Eingabetaste, 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 App 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 haben gelernt, wie Sie eine Verbindung zu Cloud SQL in Ihrer Spring Boot-App herstellen.

Weitere Informationen