Partilhar via


Utilize o Spring Data JDBC com o Azure Database para PostgreSQL

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

  • 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.

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.

  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 JDBC, 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.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.

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.

  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 JDBC, 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.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.

  1. 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);
    
  1. Cria uma nova classe Todo Java. Esta classe é um modelo de domínio mapeado na tabela todo que será criada automaticamente pelo Spring Boot. O código a seguir ignora os getters métodos e setters .

    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;
    
    }
    
  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.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.

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

Próximos passos