Usar o Spring Data JDBC com o Banco de Dados do Azure para PostgreSQL
Este tutorial demonstra como armazenar dados em um banco de dados do Azure para PostgreSQL usando o Spring Data JDBC.
JDBC é a API Java padrão para se conectar a bancos de dados relacionais tradicionais.
Neste tutorial, incluímos dois métodos de autenticação: autenticação Microsoft Entra e autenticação PostgreSQL. A guia Sem senha mostra a autenticação do Microsoft Entra e a guia Senha mostra a autenticação do PostgreSQL.
A autenticação do Microsoft Entra é um mecanismo para se conectar ao Banco de Dados do Azure para PostgreSQL usando identidades definidas na ID do Microsoft Entra. Com a autenticação do Microsoft Entra, você pode gerenciar identidades de usuário de banco de dados e outros serviços da Microsoft em um local central, o que simplifica o gerenciamento de permissões.
A autenticação do PostgreSQL usa contas armazenadas no PostgreSQL. Se você optar por usar senhas como credenciais para as contas, essas credenciais serão armazenadas na user
tabela. Como essas senhas são armazenadas no PostgreSQL, você precisa gerenciar a rotação das senhas sozinho.
Pré-requisitos
Uma assinatura do Azure - crie uma gratuitamente.
Java Development Kit (JDK), versão 8 ou superior.
Se você não tiver um aplicativo Spring Boot, crie um projeto Maven com o Spring Initializr. Certifique-se de selecionar Projeto Maven e, em Dependências, adicione as dependências Spring Web, Spring Data JDBC e PostgreSQL Driver e, em seguida, selecione Java versão 8 ou superior.
- Se você não tiver um, crie um Banco de Dados do Azure para instância do Servidor Flexível PostgreSQL nomeado
postgresqlflexibletest
e um banco de dados chamadodemo
. Para obter instruções, consulte Guia de início rápido: criar um banco de dados do Azure para PostgreSQL - Servidor flexível no portal do Azure.
Veja o aplicativo de exemplo
Neste tutorial, você codificará um aplicativo de exemplo. Se você quiser ir mais rápido, este aplicativo já está codificado e disponível em https://github.com/Azure-Samples/quickstart-spring-data-jdbc-postgresql.
Configurar uma regra de firewall para o seu servidor PostgreSQL
As instâncias do Banco de Dados do Azure para PostgreSQL são protegidas por padrão. O serviço tem uma firewall que não permite ligações de entrada.
Para poder usar seu banco de dados, abra o firewall do servidor para permitir que o endereço IP local acesse o servidor de banco de dados. Para obter mais informações, consulte Regras de firewall no Banco de Dados do Azure para PostgreSQL - Servidor flexível.
Se você estiver se conectando ao seu servidor PostgreSQL a partir do Subsistema Windows para Linux (WSL) em um computador Windows, precisará adicionar o ID do host WSL ao firewall.
Criar um usuário não administrador do PostgreSQL e conceder permissão
Em seguida, crie um usuário não administrador e conceda todas as permissões ao banco de dados.
Você pode usar o método a seguir para criar um usuário não administrador que usa uma conexão sem senha.
Use o seguinte comando para instalar a extensão sem senha do Service Connector para a CLI do Azure:
az extension add --name serviceconnector-passwordless --upgrade
Use o seguinte comando para criar o usuário não administrador do Microsoft Entra:
az connection create postgres-flexible \ --resource-group <your_resource_group_name> \ --connection postgres_conn \ --target-resource-group <your_resource_group_name> \ --server postgresqlflexibletest \ --database demo \ --user-account \ --query authInfo.userName \ --output tsv
Quando o comando for concluído, anote o nome de usuário na saída do console.
Armazenar dados do Banco de Dados do Azure para PostgreSQL
Agora que você tem uma instância do Banco de Dados do Azure para Servidor Flexível PostgreSQL, pode armazenar dados usando o Spring Cloud Azure.
Para instalar o módulo Spring Cloud Azure Starter JDBC PostgreSQL, adicione as seguintes dependências ao seu arquivo pom.xml :
A lista de materiais (BOM) do Azure Spring Cloud:
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>5.19.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
Nota
Se estiver a utilizar o Spring Boot 2.x, certifique-se de que define a
spring-cloud-azure-dependencies
versão como4.19.0
. Esta lista de materiais (BOM) deve ser configurada na<dependencyManagement>
seção do seu arquivo de pom.xml . Isso garante que todas as dependências do Spring Cloud Azure estejam usando a mesma versão. Para obter mais informações sobre a versão usada para essa lista técnica, consulte Qual versão do Spring Cloud Azure devo usar.O artefato Spring Cloud Azure Starter JDBC PostgreSQL:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-jdbc-postgresql</artifactId> </dependency>
Nota
Conexões sem senha são suportadas desde a versão 4.5.0
.
Configurar o Spring Boot para usar o Banco de Dados do Azure para PostgreSQL
Para armazenar dados do Banco de Dados do Azure para PostgreSQL usando o Spring Data JDBC, siga estas etapas para configurar o aplicativo:
Configure o Banco de Dados do Azure para credenciais PostgreSQL adicionando as seguintes propriedades ao seu arquivo de configuração application.properties .
logging.level.org.springframework.jdbc.core=DEBUG spring.datasource.url=jdbc:postgresql://postgresqlflexibletest.postgres.database.azure.com:5432/demo?sslmode=require spring.datasource.username=<your_postgresql_ad_non_admin_username> spring.datasource.azure.passwordless-enabled=true spring.sql.init.mode=always
Aviso
A propriedade
spring.sql.init.mode=always
configuration significa que o Spring Boot gerará automaticamente um esquema de banco de dados, usando o arquivo schema.sql que você criará em seguida, sempre que o servidor for iniciado. Esse recurso é ótimo para testes, mas lembre-se de que ele excluirá seus dados a cada reinicialização, portanto, você não deve usá-lo na produção.
- Se você não tiver um, crie um Banco de Dados do Azure para instância do Servidor Único PostgreSQL nomeado
postgresqlsingletest
e um banco de dados chamadodemo
. Para obter instruções, consulte Guia de início rápido: criar um banco de dados do Azure para o servidor PostgreSQL usando o portal do Azure.
Veja o aplicativo de exemplo
Neste artigo, você codificará um aplicativo de exemplo. Se você quiser ir mais rápido, este aplicativo já está codificado e disponível em https://github.com/Azure-Samples/quickstart-spring-data-jdbc-postgresql.
Configurar uma regra de firewall para o seu servidor PostgreSQL
As instâncias do Banco de Dados do Azure para PostgreSQL são protegidas por padrão. O serviço tem uma firewall que não permite ligações de entrada.
Para poder usar seu banco de dados, abra o firewall do servidor para permitir que o endereço IP local acesse o servidor de banco de dados. Para obter mais informações, consulte Criar e gerenciar regras de firewall para o Banco de Dados do Azure para PostgreSQL - Servidor Único usando o portal do Azure.
Se você estiver se conectando ao seu servidor PostgreSQL a partir do Subsistema Windows para Linux (WSL) em um computador Windows, precisará adicionar o ID do host WSL ao firewall.
Criar um usuário não administrador do PostgreSQL e conceder permissão
Em seguida, crie um usuário não administrador e conceda todas as permissões ao banco de dados.
Você pode usar o método a seguir para criar um usuário não administrador que usa uma conexão sem senha.
Use o seguinte comando para instalar a extensão sem senha do Service Connector para a CLI do Azure:
az extension add --name serviceconnector-passwordless --upgrade
Use o seguinte comando para criar o usuário não administrador do Microsoft Entra:
az connection create postgres \ --resource-group <your_resource_group_name> \ --connection postgres_conn \ --target-resource-group <your_resource_group_name> \ --server postgresqlsingletest \ --database demo \ --user-account \ --query authInfo.userName \ --output tsv
Quando o comando for concluído, anote o nome de usuário na saída do console.
Armazenar dados do Banco de Dados do Azure para PostgreSQL
Agora que você tem um Banco de Dados do Azure para PostgreSQL instância de servidor único, você pode armazenar dados usando o Spring Cloud Azure.
Para instalar o módulo Spring Cloud Azure Starter JDBC PostgreSQL, adicione as seguintes dependências ao seu arquivo pom.xml :
A lista de materiais (BOM) do Azure Spring Cloud:
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>5.19.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
Nota
Se estiver a utilizar o Spring Boot 2.x, certifique-se de que define a
spring-cloud-azure-dependencies
versão como4.19.0
. Esta lista de materiais (BOM) deve ser configurada na<dependencyManagement>
seção do seu arquivo de pom.xml . Isso garante que todas as dependências do Spring Cloud Azure estejam usando a mesma versão. Para obter mais informações sobre a versão usada para essa lista técnica, consulte Qual versão do Spring Cloud Azure devo usar.O artefato Spring Cloud Azure Starter JDBC PostgreSQL:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-jdbc-postgresql</artifactId> </dependency>
Nota
Conexões sem senha são suportadas desde a versão 4.5.0
.
Configurar o Spring Boot para usar o Banco de Dados do Azure para PostgreSQL
Para armazenar dados do Banco de Dados do Azure para PostgreSQL usando o Spring Data JDBC, siga estas etapas para configurar o aplicativo:
Configure o Banco de Dados do Azure para credenciais PostgreSQL adicionando as seguintes propriedades ao seu arquivo de configuração application.properties .
logging.level.org.springframework.jdbc.core=DEBUG spring.datasource.url=jdbc:postgresql://postgresqlsingletest.postgres.database.azure.com:5432/demo?sslmode=require spring.datasource.username=<your_postgresql_ad_non_admin_username>@postgresqlsingletest spring.datasource.azure.passwordless-enabled=true spring.sql.init.mode=always
Aviso
A propriedade
spring.sql.init.mode=always
configuration significa que o Spring Boot gerará automaticamente um esquema de banco de dados, usando o arquivo schema.sql que você criará em seguida, sempre que o servidor for iniciado. Esse recurso é ótimo para testes, mas lembre-se de que ele excluirá seus dados a cada reinicialização, portanto, você não deve usá-lo na produção.
Crie o arquivo de configuração src/main/resources/schema.sql para configurar o esquema do banco de dados e adicione o seguinte conteúdo.
DROP TABLE IF EXISTS todo; CREATE TABLE todo (id SERIAL PRIMARY KEY, description VARCHAR(255), details VARCHAR(4096), done BOOLEAN);
Crie uma nova
Todo
classe Java. Esta classe é um modelo de domínio mapeadotodo
na tabela que será criado automaticamente pelo Spring Boot. O código a seguir ignora osgetters
métodos esetters
.import org.springframework.data.annotation.Id; public class Todo { public Todo() { } public Todo(String description, String details, boolean done) { this.description = description; this.details = details; this.done = done; } @Id private Long id; private String description; private String details; private boolean done; }
Edite o arquivo de classe de inicialização para mostrar o seguinte conteúdo.
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.context.event.ApplicationReadyEvent; import org.springframework.context.ApplicationListener; import org.springframework.context.annotation.Bean; import org.springframework.data.repository.CrudRepository; import java.util.stream.Stream; @SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } @Bean ApplicationListener<ApplicationReadyEvent> basicsApplicationListener(TodoRepository repository) { return event->repository .saveAll(Stream.of("A", "B", "C").map(name->new Todo("configuration", "congratulations, you have set up correctly!", true)).toList()) .forEach(System.out::println); } } interface TodoRepository extends CrudRepository<Todo, Long> { }
Gorjeta
Neste tutorial, não há operações de autenticação nas configurações ou no código. No entanto, conectar-se aos serviços do Azure requer autenticação. Para concluir a autenticação, você precisa usar a Identidade do Azure. O Spring Cloud Azure usa
DefaultAzureCredential
o , que a biblioteca de Identidades do Azure fornece para ajudá-lo a obter credenciais sem alterações de código.DefaultAzureCredential
Suporta vários métodos de autenticação e determina qual método usar em tempo de execução. Essa abordagem permite que seu aplicativo use diferentes métodos de autenticação em ambientes diferentes (como ambientes locais e de produção) sem implementar código específico do ambiente. Para obter mais informações, consulte DefaultAzureCredential.Para concluir a autenticação em ambientes de desenvolvimento local, você pode usar a CLI do Azure, o Visual Studio Code, o PowerShell ou outros métodos. Para obter mais informações, consulte Autenticação do Azure em ambientes de desenvolvimento Java. Para concluir a autenticação em ambientes de hospedagem do Azure, recomendamos o uso da identidade gerenciada atribuída pelo usuário. Para obter mais informações, consulte O que são identidades gerenciadas para recursos do Azure?
Inicie a aplicação. O aplicativo armazena dados no banco de dados. Você verá logs semelhantes ao exemplo a seguir:
2023-02-01 10:22:36.701 DEBUG 7948 --- [main] o.s.jdbc.core.JdbcTemplate : Executing prepared SQL statement [INSERT INTO todo (description, details, done) VALUES (?, ?, ?)] com.example.demo.Todo@4bdb04c8
Implantar no Azure Spring Apps
Agora que você tem o aplicativo Spring Boot em execução localmente, é hora de movê-lo para a produção. O Azure Spring Apps facilita a implantação de aplicativos Spring Boot no Azure sem alterações de código. O serviço gerencia a infraestrutura dos aplicativos Spring para que os desenvolvedores possam se concentrar em seu código. O Azure Spring Apps fornece gerenciamento do ciclo de vida usando monitoramento e diagnóstico abrangentes, gerenciamento de configuração, descoberta de serviços, integração de CI/CD, implantações azul-verde e muito mais. Para implantar seu aplicativo no Azure Spring Apps, consulte Implantar seu primeiro aplicativo no Azure Spring Apps.