Conectar um app Spring Boot ao Cloud SQL

1. Antes de começar

O Cloud SQL é um serviço de banco de dados totalmente gerenciado que facilita a configuração, a manutenção, o gerenciamento e a administração de bancos de dados relacionais no Google Cloud. É possível usar o Cloud SQL com o Cloud SQL para MySQL ou o Cloud SQL para PostgreSQL.

Neste codelab, você vai aprender a configurar uma instância do Cloud SQL para MySQL e atualizar um app Spring Boot para usar a instância do Cloud SQL como armazenamento de back-end. O Spring Boot Starter para Google Cloud SQL oferece um DataSource autoconfigurado, permitindo que você aproveite o Cloud SQL com mudanças mínimas no seu código. Este codelab usa o código-fonte do Spring Petclinic.

Pré-requisitos

  • Noções básicas sobre a linguagem de programação Java e ferramentas
  • Conhecimento de editores de texto padrão do Linux, como Vim, Emacs e nano

O que você aprenderá

  • Usar o Cloud SQL no seu app Spring Boot.

O que é necessário

2. Configuração e requisitos

Configuração de ambiente autoguiada

  1. Faça login no Console do Google Cloud e crie um novo projeto ou reutilize um existente. Crie uma conta do Gmail ou do Google Workspace, se ainda não tiver uma.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • O Nome do projeto é o nome de exibição para os participantes do projeto. É uma string de caracteres não usada pelas APIs do Google e pode ser atualizada quando você quiser.
  • O ID do projeto precisa ser exclusivo em todos os projetos do Google Cloud e não pode ser mudado após a definição. O console do Cloud gera automaticamente uma string exclusiva. Em geral, não importa o que seja. Na maioria dos codelabs, é necessário fazer referência ao ID do projeto, normalmente identificado como PROJECT_ID. Se você não gostar do ID gerado, crie outro aleatório. Se preferir, teste o seu e confira se ele está disponível. Ele não pode ser mudado após essa etapa e permanece durante o projeto.
  • Para sua informação, há um terceiro valor, um Número do projeto, que algumas APIs usam. Saiba mais sobre esses três valores na documentação.
  1. Em seguida, ative o faturamento no console do Cloud para usar os recursos/APIs do Cloud. A execução deste codelab não vai ser muito cara, se tiver algum custo. Para encerrar os recursos e evitar cobranças além deste tutorial, exclua os recursos criados ou exclua o projeto. Novos usuários do Google Cloud estão qualificados para o programa de US$ 300 de avaliação sem custos.

Ativar o Cloud Shell

  1. No Console do Cloud, clique em Ativar o Cloud Shell853e55310c205094.png.

55efc1aaa7a4d3ad.png

Se esta for a primeira vez que você inicia o Cloud Shell, uma tela intermediária vai aparecer com a descrição dele. Se isso acontecer, clique em Continuar.

9c92662c6a846a5c.png

Leva apenas alguns instantes para provisionar e se conectar ao Cloud Shell.

9f0e51b578fecce5.png

Essa máquina virtual contém todas as ferramentas de desenvolvimento necessárias. Ela oferece um diretório principal persistente de 5 GB, além de ser executada no Google Cloud. Isso aprimora o desempenho e a autenticação da rede. Neste codelab, quase todo o trabalho pode ser feito com um navegador.

Depois de se conectar ao Cloud Shell, você vai ver que sua conta já está autenticada e que o projeto está configurado com o ID do seu projeto.

  1. Execute o seguinte comando no Cloud Shell para confirmar se a conta está autenticada:
gcloud auth list

Resposta ao comando

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

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. Execute o comando a seguir no Cloud Shell para confirmar se o comando gcloud sabe sobre seu projeto:
gcloud config list project

Resposta ao comando

[core]
project = <PROJECT_ID>

Se o projeto não estiver configurado, configure-o usando este comando:

gcloud config set project <PROJECT_ID>

Resposta ao comando

Updated property [core/project].

3. Configurar uma instância do Cloud SQL para MySQL

  1. Depois que o Cloud Shell for iniciado, use a linha de comando para criar uma instância do Cloud SQL:
$ gcloud sql instances create my-instance

Após a conclusão dessa operação, sua instância estará pronta para uso.

  1. Agora crie um banco de dados que você vai usar para o app Petclinic:
$ gcloud sql databases create petclinic --instance my-instance

Também é possível acessar e configurar a instância pelo Console do Cloud.

  1. Receba o nome da conexão da instância no formato project-id:zone-id:instance-id executando o comando a seguir. Você vai usar isso mais tarde na configuração do app Spring Boot.
$ gcloud sql instances describe my-instance | grep connectionName

4. Clonar e testar o app Petclinic localmente

  1. Agora você vai clonar o app Petclinic localmente.
$ git clone https://github.com/spring-projects/spring-petclinic

$ cd spring-petclinic
  1. Verifique se a versão correta do Java está definida e execute o app Petclinic localmente.
$ export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64/

$ ./mvnw spring-boot:run
  1. Clique em Visualização da Web1a94d5bd10bfc072.png no Cloud Shell e selecione Visualizar na porta 8080.

3aca52f76c6c22a3.png

Você vai ver a página inicial do Petclinic, como mostrado aqui no navegador:

34e0d4f1e1765560.png

  1. Teste e adicione dados. O app usa um banco de dados HyperSQL na memória. Agora você vai mudar do HyperSQL para o Cloud SQL como banco de dados.

5. Usar o Cloud SQL no Petclinic

Atualize o arquivo pom.xml do Maven.

Atualize o arquivo pom.xml conforme mostrado aqui. O starter fornece um objeto DataSource autoconfigurado para se conectar ao banco de dados do Cloud SQL. Você pode usar o Vim, o nano ou o Emacs para editar o arquivo.

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>

Atualizar application-mysql.properties

  1. Substitua o conteúdo de src/main/resources/application-mysql.properties pelas seguintes propriedades. Você precisará definir o nome da conexão da instância da etapa anterior.

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. Por fim, ative um perfil do Cloud SQL para MySQL no app Spring Boot adicionando mysql à propriedade spring.profiles.active de application.properties:

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. Executar o app no Cloud Shell

  1. Você pode iniciar o app Spring Boot normalmente com o plug-in Spring Boot:
$ ./mvnw -DskipTests spring-boot:run
  1. Quando o app for iniciado, clique em Visualização da Web1a94d5bd10bfc072.png na barra de ferramentas do Cloud Shell e selecione Visualizar na porta 8080.

3aca52f76c6c22a3.png

A página inicial do Spring Petclinic vai aparecer novamente, como mostrado aqui no navegador:

34e0d4f1e1765560.png

  1. Adicione uma entrada de proprietário de animal de estimação.

Opcional: verifique se o Cloud SQL persistiu os dados

Verifique se os dados inseridos foram mantidos no Cloud SQL, conforme mostrado aqui. Pressione "Enter" quando uma senha for solicitada.

$ 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: excluir a instância do Cloud SQL

Depois de interromper o app, é possível excluir a instância do Cloud SQL usando o seguinte comando:

$ gcloud sql instances delete my-instance

7. Parabéns

Você aprendeu a se conectar ao Cloud SQL no seu app Spring Boot.

Saiba mais