Łączenie aplikacji Spring Boot z Cloud SQL

Cloud SQL to w pełni zarządzana usługa bazy danych, która ułatwia konfigurowanie i obsługę relacyjnych baz danych w Google Cloud oraz zarządzanie nimi i administrowanie. Możesz używać Cloud SQL z Cloud SQL for MySQL lub Cloud SQL for PostgreSQL.

Z tego przewodnika dowiesz się, jak skonfigurować instancję Cloud SQL for MySQL, a następnie zaktualizować aplikację Spring Boot, aby używała instancji Cloud SQL jako pamięci backendu. Spring Boot Starter for Google Cloud SQL zapewnia automatycznie skonfigurowane DataSource, dzięki czemu możesz łatwo korzystać z Cloud SQL przy minimalnych zmianach w kodzie. W tym laboratorium używany jest kod źródłowy Spring Petclinic.

Wymagania wstępne

  • Znajomość języka programowania Java i narzędzi
  • Znajomość standardowych edytorów tekstu systemu Linux, takich jak Vim, Emacs i nano

Co musisz zrobić

  • Używanie Cloud SQL w aplikacji Spring Boot.

Czego potrzebujesz

Samodzielne konfigurowanie środowiska

  1. Zaloguj się w konsoli Google Cloud i utwórz nowy projekt lub użyj istniejącego. (Jeśli nie masz jeszcze konta Gmail lub G Suite, musisz je utworzyć).

Zapamiętaj identyfikator projektu, czyli unikalną nazwę we wszystkich projektach Google Cloud (podana powyżej nazwa jest już zajęta i nie będzie działać w Twoim przypadku). W dalszej części tego laboratorium będzie on nazywany PROJECT_ID.

  1. Następnie musisz włączyć płatności w Cloud Console, aby móc korzystać z zasobów Google Cloud.

Wykonanie tego samouczka nie powinno kosztować więcej niż kilka dolarów, ale może okazać się droższe, jeśli zdecydujesz się wykorzystać więcej zasobów lub pozostawisz je uruchomione.

Nowi użytkownicy Google Cloud mogą skorzystać z bezpłatnego okresu próbnego, w którym mają do dyspozycji środki w wysokości 300 USD.

Aktywowanie Cloud Shell

  1. W konsoli Cloud kliknij Aktywuj Cloud Shell .

Jeśli nigdy wcześniej nie uruchamiałeś(-aś) Cloud Shell, zobaczysz ekran pośredni (poniżej linii podziału) z opisem tego środowiska. W takim przypadku kliknij Dalej (i nie zobaczysz już tego ekranu). Ekran jednorazowy wygląda tak:

Udostępnienie Cloud Shell i połączenie się z nim powinno zająć tylko kilka chwil.

Ta maszyna wirtualna zawiera wszystkie potrzebne narzędzia dla programistów. Zawiera stały katalog domowy o pojemności 5 GB i działa w Google Cloud, co znacznie zwiększa wydajność sieci i uwierzytelnianie. Większość, jeśli nie wszystkie, zadań w tym laboratorium możesz wykonać za pomocą przeglądarki lub Chromebooka.

Po połączeniu z Cloud Shell zobaczysz, że jesteś już uwierzytelniony, a projekt jest już ustawiony na Twój identyfikator projektu.

  1. Aby potwierdzić, że masz autoryzację, uruchom w Cloud Shell to polecenie:
gcloud auth list

Wynik polecenia

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

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

Wynik polecenia

[core]
project = <PROJECT_ID>

Jeśli nie, możesz ustawić go za pomocą tego polecenia:

gcloud config set project <PROJECT_ID>

Wynik polecenia

Updated property [core/project].
  1. Po uruchomieniu Cloud Shell możesz utworzyć nową instancję Cloud SQL za pomocą wiersza poleceń:
$ gcloud sql instances create my-instance

Po zakończeniu tej operacji instancja będzie gotowa do użycia.

  1. Teraz utwórz bazę danych, której będziesz używać w aplikacji Petclinic:
$ gcloud sql databases create petclinic --instance my-instance

Możesz też uzyskać dostęp do instancji i skonfigurować ją w konsoli Google Cloud.

  1. Aby uzyskać nazwę połączenia instancji w formacie project-id:zone-id:instance-id, uruchom to polecenie. Użyjesz go później podczas konfigurowania aplikacji Spring Boot.
$ gcloud sql instances describe my-instance |grep connectionName
  1. Teraz sklonujesz i przetestujesz lokalnie aplikację Petclinic.
$ git clone https://github.com/spring-projects/spring-petclinic
$ cd spring-petclinic
$ ./mvnw spring-boot:run
  1. W Cloud Shell kliknij Podgląd w przeglądarce , a następnie wybierz Podejrzyj na porcie 8080.

W przeglądarce powinna być widoczna strona główna Petclinic, jak pokazano poniżej:

  1. Eksperymentuj i dodawaj dane. Aplikacja korzysta z bazy danych HyperSQL w pamięci. Teraz przejdziesz z HyperSQL na Cloud SQL jako bazę danych.

Zaktualizuj plik Maven pom.xml

Zaktualizuj plik pom.xml zgodnie z instrukcjami. Starter udostępnia automatycznie skonfigurowany obiekt DataSource do łączenia się z bazą danych Cloud SQL. Do edycji pliku możesz użyć edytora Vim, nano lub Emacs.

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>

Aktualizacja pliku application-mysql.properties

  1. Zastąp zawartość pliku src/main/resources/application-mysql.properties tymi właściwościami. Musisz ustawić nazwę połączenia z instancją z poprzedniego kroku.

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. Na koniec włącz profil Cloud SQL for MySQL w aplikacji Spring Boot, dodając mysql do właściwości application.properties' spring.profiles.active:

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
  1. Aplikację Spring Boot możesz uruchomić normalnie za pomocą wtyczki Spring Boot:
$ ./mvnw -DskipTests spring-boot:run
  1. Po uruchomieniu aplikacji kliknij Podgląd w przeglądarce na pasku narzędzi Cloud Shell, a następnie wybierz Podejrzyj na porcie 8080.

W przeglądarce powinna ponownie wyświetlić się strona główna Spring Petclinic, jak pokazano poniżej:

  1. Dodaj wpis właściciela zwierzęcia.

Opcjonalnie: sprawdź, czy Cloud SQL zapisał dane

Możesz sprawdzić, czy wprowadzone dane zostały zapisane w Cloud SQL, jak pokazano tutaj. Gdy pojawi się prośba o podanie hasła, naciśnij Enter (Return na komputerze Macintosh).

$ 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;
  

Opcjonalnie: usuń instancję Cloud SQL

Po zatrzymaniu aplikacji możesz usunąć instancję Cloud SQL za pomocą tego polecenia:

$ gcloud sql instances delete my-instance 

Dowiedzieliśmy się, jak połączyć się z Cloud SQL w aplikacji Spring Boot.

Więcej informacji