Conectar um app de inicialização do Spring ao Cloud SQL

Conectar um app de inicialização do Spring ao Cloud SQL

Sobre este codelab

subjectÚltimo abr. 22, 2020 atualizado
account_circleEscrito por um Googler

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 Cloud SQL para PostgreSQL.

Neste codelab, você aprenderá a configurar uma instância do Cloud SQL para MySQL e a 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 fornece um DataSource configurado automaticamente, permitindo que você aproveite facilmente o Cloud SQL com alterações mínimas no seu código. Este codelab usa o código-fonte do Spring Petclinic.

Pré-requisitos

  • Familiaridade com uma linguagem de programação Java e ferramentas
  • Conhecimento sobre os editores de texto padrão do Linux, como Vim, Emacs e nano

O que você aprenderá

  • Use o Cloud SQL no seu app Spring Boot.

O que é necessário

2. Configuração e requisitos

Configuração de ambiente personalizada

  1. Faça login no Console do Cloud e crie um novo projeto ou reutilize um existente. Se você ainda não tem uma conta do Gmail ou do G Suite, crie uma.

Lembre-se do código do projeto, um nome exclusivo em todos os projetos do Google Cloud. O nome acima já foi escolhido e não servirá para você. Faremos referência a ele mais adiante neste codelab como PROJECT_ID.

  1. Em seguida, você precisará ativar o faturamento no Console do Cloud para usar os recursos do Google Cloud.

A execução por este codelab não deve custar mais do que alguns dólares, mas pode ser mais se você decidir usar mais recursos ou se deixá-los em execução.

Novos usuários do Google Cloud estão qualificados para um teste sem custo financeiro de US$300.

Ativar o Cloud Shell

  1. No Console do Cloud, clique em Ativar o Cloud Shell .

Se você nunca tiver iniciado o Cloud Shell, verá uma tela intermediária (abaixo da dobra) com a descrição do que ele é. Se esse for o caso, clique em Continuar e você não o verá novamente. Esta é uma tela única:

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

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. Praticamente todo o seu trabalho neste codelab pode ser feito em um navegador ou no seu Chromebook.

Depois de se conectar ao Cloud Shell, você já estará autenticado e o projeto já estará configurado com seu ID do projeto.

  1. Execute o seguinte comando no Cloud Shell para confirmar que você está autenticado:
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`
gcloud config list project

Resposta ao comando

[core]
project = <PROJECT_ID>

Se o projeto não estiver configurado, faça a configuraçã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 de iniciar o Cloud Shell, use a linha de comando para criar uma nova 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ê usará no app Petclinic:
$ gcloud sql databases create petclinic --instance my-instance

Também é possível acessar e configurar a instância por meio do 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ê usará isso mais tarde ao configurar o app Spring Boot.
$ gcloud sql instances describe my-instance |grep connectionName

4. Clonar e testar o app Petclinic localmente

  1. Agora você clonará e testará o app Petclinic localmente.
$ git clone https://github.com/spring-projects/spring-petclinic
$ cd spring-petclinic
$ ./mvnw spring-boot:run
  1. Clique em Visualização na Web no Cloud Shell e selecione Visualizar na porta 8080.

Você verá a página inicial da Petclinic mostrada no seu navegador:

  1. Jogue e adicione dados. O app usa um banco de dados HyperSQL na memória. Migre do HyperSQL para usar o Cloud SQL como seu banco de dados.

5. Usar o Cloud SQL na Petclinic

Atualize o arquivo pom.xml do Maven.

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

pom.xml (link em inglês)

<?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>

Atualizar application-mysql.properties

  1. Substitua o conteúdo de src/main/resources/application-mysql.properties pelas propriedades a seguir. Você precisará definir o nome da conexão da instância da etapa 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 fim, ative um perfil do Cloud SQL para MySQL no app Spring Boot adicionando mysql à propriedade 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

6. Executar o app no Cloud Shell

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

Você verá a página inicial da Spring Petclinic novamente como mostrado aqui no navegador:

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

Opcional: verificar se o Cloud SQL manteve os dados

É possível verificar se os dados inseridos foram mantidos no Cloud SQL, como mostrado aqui. Pressione Enter (retornar no Macintosh) 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 aplicativo, é 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