Partilhar via


Use Spring Data JPA com Azure Database for PostgreSQL

Este tutorial demonstra como armazenar dados em Azure Database for 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 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

  • 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, adicionar 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 Azure Database for PostgreSQL Flexible Server. Para mais informações, consulte Gerir papéis do Microsoft Entra na Azure Database for 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 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.

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

     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 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-dependencies versão para 7.1.0.

    Se estiveres a usar o Spring Boot 3.5.x, certifica-te de definir a spring-cloud-azure-dependencies versão para 6.1.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, 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 JPA, siga estes passos para configurar a aplicação:

  1. Configure as credenciais do Azure Database for 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 Azure Database for 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 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.

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

     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 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-dependencies versão para 7.1.0.

    Se estiveres a usar o Spring Boot 3.5.x, certifica-te de definir a spring-cloud-azure-dependencies versão para 6.1.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, 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 JPA, siga estes passos para configurar a aplicação:

  1. Configure as credenciais do Azure Database for 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 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?

  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
    

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.

Próximos passos