Conecta una app de Spring Boot a Cloud SQL

Cloud SQL es un servicio de base de datos completamente administrado que facilita la configuración, el mantenimiento, la administración y la gestión de tus bases de datos relacionales en Google Cloud. Puedes usar Cloud SQL con Cloud SQL para MySQL o Cloud SQL para PostgreSQL.

En este codelab, aprenderás a configurar una instancia de Cloud SQL para MySQL y, luego, a actualizar una app de Spring Boot para usar la instancia de Cloud SQL como su almacenamiento en backend. El Spring Boot Starter para Google Cloud SQL proporciona un DataSource configurado automáticamente, lo que te permite aprovechar fácilmente Cloud SQL con cambios mínimos en tu código. En este codelab, se usa el código fuente de Spring Petclinic.

Requisitos previos

  • Tener conocimientos del lenguaje de programación y las herramientas de Java
  • Conocimiento de editores de texto estándares de Linux, como Vim, Emacs y nano

Actividades

  • Usar Cloud SQL en tu app de Spring Boot

Requisitos

Configuración del entorno de autoaprendizaje

  1. Accede a Cloud Console y crea un proyecto nuevo o reutiliza uno existente. (Si todavía no tienes una cuenta de Gmail o de G Suite, debes crear una).

Recuerde el ID de proyecto, un nombre único en todos los proyectos de Google Cloud (el nombre anterior ya se encuentra en uso y no lo podrá usar). Se mencionará más adelante en este codelab como PROJECT_ID.

  1. A continuación, deberás habilitar la facturación en la consola de Cloud para usar los recursos de Google Cloud.

Ejecutar este codelab debería costar solo unos pocos dólares, pero su costo podría aumentar si decides usar más recursos o si los dejas en ejecución.

Los usuarios nuevos de Google Cloud son aptos para obtener una prueba gratuita de USD 300.

Activar Cloud Shell

  1. En la consola de Cloud, haz clic en Activar Cloud Shell .

Si nunca ha iniciado Cloud Shell, aparecerá una pantalla intermedia (debajo de la mitad inferior de la página) que describe qué es. Si ese es el caso, haz clic en Continuar (y no volverás a verlo). Así es como se ve la pantalla única:

El aprovisionamiento y la conexión a Cloud Shell solo tomará unos minutos.

Esta máquina virtual está cargada con todas las herramientas de desarrollo que necesitarás. Ofrece un directorio principal persistente de 5 GB y se ejecuta en Google Cloud, lo que permite mejorar considerablemente el rendimiento de la red y la autenticación. Gran parte de tu trabajo en este codelab, si no todo, se puede hacer simplemente con un navegador o tu Chromebook.

Una vez conectado a Cloud Shell, debería ver que ya se autenticó y que el proyecto ya se configuró con tu ID del proyecto.

  1. En Cloud Shell, ejecuta el siguiente comando para confirmar que está autenticado:
gcloud auth list

Resultado del comando

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

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

Resultado del comando

[core]
project = <PROJECT_ID>

De lo contrario, puedes configurarlo con el siguiente comando:

gcloud config set project <PROJECT_ID>

Resultado del comando

Updated property [core/project].
  1. Después de que se inicie Cloud Shell, puedes usar la línea de comandos para crear una nueva instancia de Cloud SQL:
$ gcloud sql instances create my-instance

Una vez que se complete esta operación, tu instancia estará lista para usar.

  1. Ahora, crea una base de datos que usarás para la app de Petclinic:
$ gcloud sql databases create petclinic --instance my-instance

También puedes acceder a la instancia y configurarla a través de la consola de Cloud.

  1. Obtén el nombre de la conexión de la instancia en el formato project-id:zone-id:instance-id mediante la ejecución del comando siguiente. Lo usarás más adelante para configurar tu app de Spring Boot.
$ gcloud sql instances describe my-instance |grep connectionName
  1. Ahora clonarás y probarás la app de Petclinic de forma local.
$ git clone https://github.com/spring-projects/spring-petclinic
$ cd spring-petclinic
$ ./mvnw spring-boot:run
  1. Haz clic en Vista previa en la Web en Cloud Shell y, luego, selecciona Vista previa en el puerto 8080.

Deberías ver la página principal de Petclinic, como se muestra aquí en tu navegador:

  1. Experimenta y agrega datos. La app usa una base de datos HyperSQL en la memoria. Ahora cambiarás de HyperSQL a Cloud SQL como tu base de datos.

Actualiza el archivo pom.xml de Maven

Actualiza el archivo pom.xml como se muestra aquí. El starter proporciona un objeto DataSource configurado automáticamente para conectarse a tu base de datos de Cloud SQL. Puedes usar Vim, nano o Emacs para editar el archivo.

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>

Actualiza application-mysql.properties

  1. Reemplaza el contenido de src/main/resources/application-mysql.properties con las siguientes propiedades. Deberás establecer el nombre de conexión de la instancia del paso anterior.

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. Por último, habilita un perfil de Cloud SQL para MySQL en la app de Spring Boot agregando mysql a la propiedad 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. Puedes iniciar la app de Spring Boot de forma normal con el complemento de Spring Boot:
$ ./mvnw -DskipTests spring-boot:run
  1. Una vez que se haya iniciado la app, haz clic en Vista previa en la Web en la barra de herramientas de Cloud Shell y, luego, selecciona Vista previa en el puerto 8080.

Deberías volver a ver la página principal de Spring Petclinic, como se muestra aquí en tu navegador:

  1. Agrega una entrada de propietario de mascota.

Opcional: Verifica que Cloud SQL haya conservado los datos

Puedes verificar que los datos que ingresaste se hayan conservado en Cloud SQL, como se muestra aquí. Presiona Intro (Retorno en Macintosh) cuando se te solicite una contraseña.

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

Opcional: Borra tu instancia de Cloud SQL

Una vez que detuviste la app, puedes borrar la instancia de Cloud SQL con el siguiente comando:

$ gcloud sql instances delete my-instance 

Aprendiste a conectarte a Cloud SQL en tu app de Spring Boot.

Más información