Cloud SQL ist ein vollständig verwalteter Datenbankdienst, mit dem Sie relationale 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 so aktualisieren, dass sie die Cloud SQL-Instanz als Backend-Speicher verwendet. Der Spring Boot Starter for 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 Java-Programmiersprache und der entsprechenden Tools
- Kenntnisse von standardmäßigen Linux-Texteditoren wie Vim, Emacs und Nano
Aufgabe
- Cloud SQL in Ihrer Spring Boot-App verwenden
Voraussetzungen
- Ein Google Cloud-Projekt
- Ein Browser, z. B. Google Chrome oder Firefox
Einrichtung der Umgebung im eigenen Tempo
- Melden Sie sich in der Cloud Console an und erstellen Sie ein neues Projekt oder verwenden Sie ein vorhandenes Projekt. 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. Sie wird in diesem Codelab später als PROJECT_ID
bezeichnet.
- Als Nächstes müssen Sie die Abrechnung in der Cloud Console aktivieren, um Google Cloud-Ressourcen verwenden zu können.
Dieses Codelab sollte Sie nicht mehr als ein paar Dollar kosten, aber es könnte mehr sein, wenn Sie sich für mehr Ressourcen entscheiden oder wenn Sie sie laufen lassen.
Neuen Nutzern der Google Cloud steht eine kostenlose Testversion mit einem Guthaben von 300$ zur Verfügung.
Cloud Shell aktivieren
- Klicken Sie in der Cloud Console auf Cloud Shell aktivieren
.
Wenn Sie Cloud Shell noch nie gestartet haben, wird ein Zwischenbildschirm angezeigt, auf dem beschrieben wird, was Cloud Shell ist. Klicken Sie in diesem Fall auf Weiter. So sieht dieser einmalige Bildschirm aus:
Die Bereitstellung und Verbindung mit Cloud Shell sollte nur wenige Augenblicke dauern.
Diese virtuelle Maschine verfügt über sämtliche Entwicklertools, die Sie benötigen. 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 alle Aufgaben in diesem Codelab können einfach mit einem Browser oder Ihrem Chromebook erledigt werden.
Sobald Sie mit Cloud Shell verbunden sind, sollten Sie sehen, dass Sie bereits authentifiziert sind und das Projekt bereits auf Ihre Projekt-ID eingestellt ist.
- 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`
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].
- 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.
- 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.
- 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
- Als Nächstes klonen Sie die Petclinic-App und testen sie lokal.
$ git clone https://github.com/spring-projects/spring-petclinic $ cd spring-petclinic $ ./mvnw spring-boot:run
- Klicken Sie in Cloud Shell auf Webvorschau
und wählen Sie dann Vorschau auf Port 8080 aus.
In Ihrem Browser sollte die Petclinic-Startseite wie hier zu sehen angezeigt werden:
- 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.
Maven-Datei pom.xml aktualisieren
Aktualisieren Sie die Datei pom.xml
wie hier gezeigt. Das Starter-Paket stellt ein automatisch konfiguriertes DataSource
-Objekt zum Herstellen einer Verbindung zu Ihrer Cloud SQL-Datenbank bereit. 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
- 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
# 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
- Aktivieren Sie zum Schluss ein Cloud SQL for MySQL-Profil in der Spring Boot-App, indem Sie der Eigenschaft
application.properties' spring.profiles.active
mysql
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
- Sie können die Spring Boot-Anwendung wie gewohnt mit dem Spring Boot-Plug-in starten:
$ ./mvnw -DskipTests spring-boot:run
- Wenn die App gestartet wurde, klicken Sie in der Cloud Shell-Symbolleiste auf Webvorschau
und wählen Sie Vorschau auf Port 8080 aus.
Sie sollten die Startseite von Spring Petclinic wieder in Ihrem Browser sehen, wie hier dargestellt:
- Eintrag für 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 (auf Macintosh die Return-Taste), 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
Sie haben gelernt, wie Sie eine Verbindung zu Cloud SQL in Ihrer Spring Boot-App herstellen.