Partilhar via


Use Spring Data JPA com Base de Dados do Azure para PostgreSQL

Este tutorial demonstra como armazenar dados em Base de Dados do Azure para PostgreSQL usando Spring Data JPA.

The Java Persistence API (JPA) é a API padrão Java para mapeamento objeto-relacional.

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 Base de Dados do Azure para 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 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

  • Cliente de linha de comando PostgreSQL.

  • 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, adicione as dependências Spring Web, Spring Data JDBC e PostgreSQL Driver, e depois selecione Java versão 8 ou superior.

Importante

Para usar ligações sem palavra-passe, configure o utilizador administrador Microsoft Entra para a sua instância do Base de Dados do Azure para PostgreSQL Flexible Server. Para mais informações, consulte Gerenciar Microsoft Entra funções em Base de Dados do Azure para PostgreSQL - Servidor Flexível.

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-jpa-postgresql.

Configurar uma regra de firewall para o seu servidor PostgreSQL

As instâncias do Base de Dados do Azure para 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 Base de Dados do Azure para PostgreSQL - Servidor Flexível.

Se estiver a ligar-se ao seu servidor PostgreSQL a partir do Subsistema Windows para 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.

  1. Use o seguinte comando para instalar a extensão sem palavra-passe Service Connector para a CLI do Azure:

     az extension add --name serviceconnector-passwordless --upgrade
    
  2. Use 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 tsv
    

    Quando 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 Base de Dados do Azure para 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.2.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-dependencies versão para 7.2.0.

    Se estiveres a usar o Spring Boot 3.5.x, certifica-te de definir a spring-cloud-azure-dependencies versão para 6.2.0.

    Se estiveres a usar o Spring Boot 3.1.x-3.5.x, certifica-te de definir a spring-cloud-azure-dependencies versão para 5.25.0.

    Se você estiver usando o Spring Boot 2.x, certifique-se de definir a versão spring-cloud-azure-dependencies como 4.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, veja Qual Versão do Spring Cloud Azure Devo Usar.

  • The Spring Cloud Azure Starter JDBC PostgreSQL artefacto:

    <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 Spring Boot para usar a Base de Dados do Azure para PostgreSQL

Para armazenar dados do Base de Dados do Azure para PostgreSQL usando o Spring Data JPA, siga estes passos para configurar a aplicação:

  1. Configure as credenciais do Base de Dados do Azure para PostgreSQL adicionando as seguintes propriedades ao seu ficheiro de configuração application.properties.

    logging.level.org.hibernate.SQL=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.jpa.hibernate.ddl-auto=create-drop
    spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
    

Importante

Para usar ligações sem palavra-passe, configure o utilizador administrador Microsoft Entra para a sua instância de servidor único do Base de Dados do Azure para PostgreSQL. Para mais informações, consulte Use Microsoft Entra ID para autenticação com PostgreSQL.

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-jpa-postgresql.

Configurar uma regra de firewall para o seu servidor PostgreSQL

As instâncias do Base de Dados do Azure para 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 Base de Dados do Azure para PostgreSQL - Servidor único usando o portal Azure.

Se estiver a ligar-se ao seu servidor PostgreSQL a partir do Subsistema Windows para 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.

  1. Use o seguinte comando para instalar a extensão sem palavra-passe Service Connector para a CLI do Azure:

     az extension add --name serviceconnector-passwordless --upgrade
    
  2. Use 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 tsv
    

    Quando 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 Base de Dados do Azure para 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.2.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-dependencies versão para 7.2.0.

    Se estiveres a usar o Spring Boot 3.5.x, certifica-te de definir a spring-cloud-azure-dependencies versão para 6.2.0.

    Se estiveres a usar o Spring Boot 3.1.x-3.5.x, certifica-te de definir a spring-cloud-azure-dependencies versão para 5.25.0.

    Se você estiver usando o Spring Boot 2.x, certifique-se de definir a versão spring-cloud-azure-dependencies como 4.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, veja Qual Versão do Spring Cloud Azure Devo Usar.

  • The Spring Cloud Azure Starter JDBC PostgreSQL artefacto:

    <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 Spring Boot para usar a Base de Dados do Azure para PostgreSQL

Para armazenar dados do Base de Dados do Azure para PostgreSQL usando o Spring Data JPA, siga estes passos para configurar a aplicação:

  1. Configure as credenciais do Base de Dados do Azure para PostgreSQL adicionando as seguintes propriedades ao seu ficheiro de configuração application.properties.

    logging.level.org.hibernate.SQL=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.jpa.hibernate.ddl-auto=create-drop
    spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
    
  1. Cria uma nova classe Todo Java. Esta classe é um modelo de domínio mapeado na tabela todo que será criada automaticamente pela JPA. O código a seguir ignora os getters métodos e setters .

    package com.example.demo;
    
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    
    @Entity
    public class Todo {
    
        public Todo() {
        }
    
        public Todo(String description, String details, boolean done) {
            this.description = description;
            this.details = details;
            this.done = done;
        }
    
        @Id
        @GeneratedValue
        private Long id;
    
        private String description;
    
        private String details;
    
        private boolean done;
    
    }
    
  2. 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.jpa.repository.JpaRepository;
    
    import java.util.stream.Collectors;
    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)).collect(Collectors.toList()))
                .forEach(System.out::println);
        }
    
    }
    
    interface TodoRepository extends JpaRepository<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.

    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 completar a autenticação em ambientes de desenvolvimento locais, pode usar CLI do Azure, 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?

  3. Inicie a aplicação. Você verá logs semelhantes ao exemplo a seguir:

    2023-02-01 10:29:19.763 DEBUG 4392 --- [main] org.hibernate.SQL : insert into todo (description, details, done, id) values (?, ?, ?, ?)
    com.example.demo.Todo@1f
    

Implementar no 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.

Próximos passos