Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Este tutorial demonstra como armazenar dados numa base de dados Azure Database for PostgreSQL usando Spring Data JDBC.
JDBC é a API Java padrão para se ligar a bases de dados relacionais tradicionais.
Neste tutorial, incluímos dois métodos de autenticação: autenticação Microsoft Entra e autenticação PostgreSQL. O separador Passwordless mostra a autenticação Microsoft Entra e o separador Password mostra a autenticação PostgreSQL.
A autenticação Microsoft Entra é um mecanismo para se ligar ao Azure Database for PostgreSQL usando identidades definidas no Microsoft Entra ID. Com a autenticação Microsoft Entra, pode gerir as identidades dos utilizadores da base de dados e outros serviços Microsoft numa localização central, o que simplifica a gestão 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 subscrição 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 Maven Project e, em Dependências, adicionar as dependências Spring Web, Spring Data JDBC e PostgreSQL Driver, e depois selecione Java versão 8 ou superior.
- Se não tiveres uma, cria uma instância Azure Database for PostgreSQL Flexible Server chamada
postgresqlflexibleteste uma base de dados chamadademo. Para instruções, consulte Quickstart: Criar um Azure Database for PostgreSQL - Servidor Flexível no portal Azure.
Veja o aplicativo de exemplo
Neste tutorial, você codificará um aplicativo de exemplo. Se quiseres ir mais rápido, esta aplicação já está codificada 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 Azure Database for PostgreSQL são seguras por defeito. Eles têm uma firewall que não permite qualquer ligação 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 mais informações, consulte Regras de firewall em Azure Database for PostgreSQL - Servidor Flexível.
Se estiver a ligar-se ao seu servidor PostgreSQL a partir do Windows Subsystem for Linux (WSL) num computador Windows, precisa de adicionar o ID do host WSL ao seu 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 palavra-passe Service Connector para a Azure CLI:
az extension add --name serviceconnector-passwordless --upgradeUse o seguinte comando para criar o utilizador 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 tsvQuando o comando for concluído, anote o nome de usuário na saída do console.
Armazenar dados do Banco de Dados Azure para PostgreSQL
Agora que tem uma instância do Azure Database for PostgreSQL Flexible Server, 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 ficheiro pom.xml:
A Lista de Materiais Spring Cloud Azure (BOM):
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>7.1.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>Nota
Se estiveres a usar o Spring Boot 4.0.x, certifica-te de definir a
spring-cloud-azure-dependenciesversão para7.1.0.Se estiveres a usar o Spring Boot 3.5.x, certifica-te de definir a
spring-cloud-azure-dependenciesversão para6.1.0.Se estiveres a usar o Spring Boot 3.1.x-3.5.x, certifica-te de definir a
spring-cloud-azure-dependenciesversão para5.25.0.Se você estiver usando o Spring Boot 2.x, certifique-se de definir a versão
spring-cloud-azure-dependenciescomo4.20.0.Esta lista de materiais (BOM) deve ser configurada na seção
<dependencyManagement>do seu arquivo pom.xml. Isto garante que todas as dependências do Spring Cloud Azure usam a mesma versão.Para mais informações sobre a versão usada nesta BOM, consulte Qual Versão do Spring Cloud Azure Devo Usar.
The Spring Cloud Azure Starter JDBC PostgreSQL artefact:
<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.
Configure o Spring Boot para usar a base de dados do Azure para PostgreSQL
Para armazenar dados do Azure Database for PostgreSQL usando o Spring Data JDBC, siga estes passos para configurar a aplicação:
Configure as credenciais do Azure Database for PostgreSQL, adicionando as seguintes propriedades ao seu ficheiro 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=alwaysAviso
A propriedade
spring.sql.init.mode=alwaysconfiguration 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 não tiveres uma, cria uma instância Azure Database for PostgreSQL Single Server chamada
postgresqlsingleteste uma base de dados chamadademo. Para instruções, consulte Quickstart: Crie um servidor Azure Database for PostgreSQL usando o portal Azure.
Veja o aplicativo de exemplo
Neste artigo, você codificará um aplicativo de exemplo. Se quiseres ir mais rápido, esta aplicação já está codificada 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 Azure Database for PostgreSQL são seguras por defeito. Eles têm uma firewall que não permite qualquer ligação 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 mais informações, consulte Criar e gerir regras de firewall para Azure Database for PostgreSQL - Servidor único usando o portal Azure.
Se estiver a ligar-se ao seu servidor PostgreSQL a partir do Windows Subsystem for Linux (WSL) num computador Windows, precisa de adicionar o ID do host WSL ao seu 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 palavra-passe Service Connector para a Azure CLI:
az extension add --name serviceconnector-passwordless --upgradeUse o seguinte comando para criar o utilizador 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 tsvQuando o comando for concluído, anote o nome de usuário na saída do console.
Armazenar dados do Banco de Dados Azure para PostgreSQL
Agora que tem uma Azure Database for PostgreSQL Single Server Instance, 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 ficheiro pom.xml:
A Lista de Materiais Spring Cloud Azure (BOM):
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>7.1.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>Nota
Se estiveres a usar o Spring Boot 4.0.x, certifica-te de definir a
spring-cloud-azure-dependenciesversão para7.1.0.Se estiveres a usar o Spring Boot 3.5.x, certifica-te de definir a
spring-cloud-azure-dependenciesversão para6.1.0.Se estiveres a usar o Spring Boot 3.1.x-3.5.x, certifica-te de definir a
spring-cloud-azure-dependenciesversão para5.25.0.Se você estiver usando o Spring Boot 2.x, certifique-se de definir a versão
spring-cloud-azure-dependenciescomo4.20.0.Esta lista de materiais (BOM) deve ser configurada na seção
<dependencyManagement>do seu arquivo pom.xml. Isto garante que todas as dependências do Spring Cloud Azure usam a mesma versão.Para mais informações sobre a versão usada nesta BOM, consulte Qual Versão do Spring Cloud Azure Devo Usar.
The Spring Cloud Azure Starter JDBC PostgreSQL artefact:
<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.
Configure o Spring Boot para usar a base de dados do Azure para PostgreSQL
Para armazenar dados do Azure Database for PostgreSQL usando o Spring Data JDBC, siga estes passos para configurar a aplicação:
Configure as credenciais do Azure Database for PostgreSQL, adicionando as seguintes propriedades ao seu ficheiro 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=alwaysAviso
A propriedade
spring.sql.init.mode=alwaysconfiguration 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);
Cria uma nova classe
TodoJava. Esta classe é um modelo de domínio mapeado na tabelatodoque será criada automaticamente pelo Spring Boot. O código a seguir ignora osgettersmé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, a ligação aos serviços do Azure requer autenticação. Para completar a autenticação, precisa de usar o Azure Identity. O Spring Cloud Azure utiliza
DefaultAzureCredential, que a biblioteca Azure Identity fornece para te ajudar a obter credenciais sem quaisquer alterações de código.DefaultAzureCredentialSuporta 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 completar a autenticação em ambientes de desenvolvimento locais, pode usar Azure CLI, Visual Studio Code, PowerShell ou outros métodos. Para mais informações, consulte Autenticação do Azure em ambientes de desenvolvimento Java. Para completar a autenticação em ambientes de alojamento Azure, recomendamos a utilização da identidade gerida atribuída pelo utilizador. Para mais informações, consulte O que são identidades geridas para Azure recursos?
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
Desdobrar para o Azure Spring Apps
Agora que você tem o aplicativo Spring Boot em execução localmente, é hora de movê-lo para a produção. Azure Spring Apps facilita a implementação de aplicações Spring Boot para Azure sem quaisquer 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 oferece gestão do ciclo de vida através de monitorização e diagnóstico abrangentes, gestão de configuração, descoberta de serviços, integração CI/CD, implementações azul-verde e muito mais. Para implementar a sua aplicação para Azure Spring Apps, consulte Implante a sua primeira aplicação para Azure Spring Apps.