Spring Boot-Anwendung mit Cloud SQL verbinden

1. Hinweis

Cloud SQL ist ein vollständig verwalteter Datenbankdienst, mit dem Sie Ihre relationalen Datenbanken in Google Cloud ganz einfach 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, 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 die Vorteile von Cloud SQL mit minimalen Änderungen am Code nutzen können. In diesem Codelab wird der Quellcode von Spring Petclinic verwendet.

Voraussetzungen

  • Vertrautheit mit der Programmiersprache und -tools von Java
  • Kenntnisse in standardmäßigen Linux-Texteditoren wie vim, emacs und nano

Aufgabe

  • Verwenden Sie Cloud SQL in Ihrer Spring Boot-Anwendung.

Voraussetzungen

2. Einrichtung und Anforderungen

Umgebung für das selbstbestimmte 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 Projektteilnehmer. Es handelt sich um eine Zeichenfolge, die von Google APIs nicht verwendet wird. Sie können sie jederzeit aktualisieren.
  • Die Projekt-ID ist für alle Google Cloud-Projekte eindeutig und unveränderlich. Sie kann nach dem Festlegen nicht mehr geändert werden. Die Cloud Console generiert automatisch einen eindeutigen String. ist Ihnen meist egal, was es ist. In den meisten Codelabs musst du auf deine Projekt-ID verweisen, die üblicherweise als PROJECT_ID bezeichnet wird. Wenn Ihnen die generierte ID nicht gefällt, können Sie eine weitere zufällige ID generieren. Alternativ können Sie einen eigenen verwenden und nachsehen, ob er verfügbar ist. Sie kann nach diesem Schritt nicht mehr geändert werden und bleibt für die Dauer des Projekts erhalten.
  • Zur Information gibt es noch einen dritten Wert, die Projektnummer, die von manchen APIs verwendet wird. Weitere Informationen zu allen drei Werten finden Sie in der Dokumentation.
  1. Als Nächstes müssen Sie in der Cloud Console die Abrechnung aktivieren, um Cloud-Ressourcen/APIs verwenden zu können. Dieses Codelab ist kostengünstig. Sie können die von Ihnen erstellten Ressourcen oder das Projekt löschen, um Ressourcen herunterzufahren, um zu vermeiden, dass über diese Anleitung hinaus Kosten anfallen. Neue Google Cloud-Nutzer haben Anspruch auf das kostenlose Testprogramm mit 300$Guthaben.

Cloud Shell aktivieren

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

55efc1aaa7a4d3ad.png

Wenn Sie Cloud Shell zum ersten Mal starten, wird ein Zwischenbildschirm mit einer Beschreibung der Funktion angezeigt. Wenn ein Zwischenbildschirm angezeigt wird, klicken Sie auf Weiter.

9c92662c6a846a5c.png

Die Bereitstellung und Verbindung mit Cloud Shell dauert nur einen Moment.

9f0e51b578fecce5.png

Diese virtuelle Maschine verfügt über alle erforderlichen Entwicklertools. Es bietet ein Basisverzeichnis mit 5 GB nichtflüchtigem Speicher und wird in Google Cloud ausgeführt, wodurch die Netzwerkleistung und Authentifizierung erheblich verbessert werden. Viele, wenn nicht sogar alle Arbeiten in diesem Codelab können mit einem Browser erledigt werden.

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

  1. Führen Sie in 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 in Cloud Shell den folgenden Befehl aus, um zu prüfen, ob 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. Nach dem Start von Cloud Shell können Sie über die Befehlszeile eine neue Cloud SQL-Instanz erstellen:
$ gcloud sql instances create my-instance

Sobald dieser Vorgang abgeschlossen ist, kann die Instanz verwendet werden.

  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 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, indem Sie den folgenden Befehl ausführen. Sie benötigen ihn später bei der Konfiguration Ihrer Spring Boot-Anwendung.
$ gcloud sql instances describe my-instance | grep connectionName

4. PetClinic App klonen und lokal testen

  1. Sie klonen die PetClinic-App jetzt lokal.
$ git clone https://github.com/spring-projects/spring-petclinic

$ cd spring-petclinic
  1. Prüfen Sie, ob die richtige Java-Version eingestellt 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

Die Startseite von PetClinic sollte in Ihrem Browser angezeigt werden, wie hier dargestellt:

34e0d4f1e1765560.png

  1. Experimentieren Sie und fügen Sie Daten hinzu. Die Anwendung verwendet eine speicherinterne HyperSQL-Datenbank. Sie wechseln jetzt von HyperSQL zur Verwendung von Cloud SQL als Datenbank.

5. Cloud SQL in der Tierklinik verwenden

Maven-pom.xml-Datei aktualisieren

Aktualisieren Sie die Datei pom.xml wie hier gezeigt. Der Auslöser 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 Attribute. 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-Anwendung, indem Sie mysql zu application.properties hinzufügen. spring.profiles.active-Property:

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. Sie können die Spring Boot-Anwendung mit dem Spring Boot-Plug-in normal starten:
$ ./mvnw -DskipTests spring-boot:run
  1. Klicken Sie nach dem Start der Anwendung in der Cloud Shell-Symbolleiste auf Webvorschau1a94d5bd10bfc072.png und wählen Sie dann Vorschau auf Port 8080 aus.

3aca52f76c6c22a3.png

Die Spring Petclinic-Startseite sollte wieder wie hier in Ihrem Browser angezeigt werden:

34e0d4f1e1765560.png

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

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

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

Weitere Informationen