Partilhar via


Use Spring Data JPA com Azure SQL Database

Este tutorial demonstra como armazenar dados em Azure SQL Database 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 por base de dados SQL. O separador Sem Palavra-passe mostra a autenticação Microsoft Entra e o separador Palavra-passe mostra a autenticação da base de dados SQL.

A autenticação Microsoft Entra é um mecanismo de ligação à Azure Database for SQL Database utilizando 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 Banco de dados SQL usa contas armazenadas no Banco de dados SQL. Se você optar por usar senhas como credenciais para as contas, essas credenciais serão armazenadas na tabela do usuário. Como essas senhas são armazenadas no Banco de dados SQL, você precisa gerenciar a rotação das senhas sozinho.

Pré-requisitos

  • sqlcmd Utility (Utilitário sqlcmd)

  • Driver ODBC 17 ou 18.

  • Se não tiveres nenhuma, cria uma instância Azure SQL Server chamada sqlservertest e uma base de dados chamada demo. Para instruções, veja Quickstart: Criar uma base de dados única - Azure SQL Database.

  • 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 Dependencies, adicionar as dependências Spring Web, Spring Data JPA e MS SQL Server Driver, e depois selecione Java versão 8 ou superior.

Importante

Para usar ligações sem palavra-passe, atualize MS SQL Server Driver para a versão 12.1.0 ou superior, e depois crie um utilizador administrador Microsoft Entra para a sua instância Azure SQL Database servidor. Para mais informações, consulte a secção Criar um administrador Microsoft Entra do Tutorial: Proteger uma base de dados em Azure SQL Database.

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

Configure uma regra de firewall para o seu servidor Azure SQL Database

As instâncias do Azure SQL Database são seguras por defeito. Eles têm 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 mais informações, consulte Tutorial: Proteger uma base de dados em Azure SQL Database.

Se estiver a ligar-se ao seu servidor Azure SQL Database 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 banco de dados SQL e conceder permissão

Esta etapa criará um usuário não administrador e concederá todas as permissões no demo banco de dados a ele.

Para usar ligações sem palavra-passe, consulte Tutorial: Proteja uma base de dados em Azure SQL Database ou use o Service Connector para criar um utilizador administrador Microsoft Entra para o seu servidor Azure SQL Database, conforme mostrado nos passos seguintes:

  1. Primeiro, instale a extensão sem palavra-passe Service Connector para o Azure CLI:

    az extension add --name serviceconnector-passwordless --upgrade
    
  2. Depois, use o seguinte comando para criar o utilizador não administrador do Microsoft Entra:

    az connection create sql \
        --resource-group <your-resource-group-name> \
        --connection sql_conn \
        --target-resource-group <your-resource-group-name> \
        --server sqlservertest \
        --database demo \
        --user-account \
        --query authInfo.userName \
        --output tsv
    

O administrador da Microsoft Entra que criaste é um utilizador administrador de base de dados SQL, por isso não precisas de criar um novo utilizador.

Importante

As ligações sem password à base de dados Azure SQL exigem a atualização do Driver MS SQL Server para a versão 12.1.0 ou superior. A opção de conexão está authentication=DefaultAzureCredential na versão 12.1.0 e authentication=ActiveDirectoryDefault na versão 12.2.0.

Armazenar dados do Azure SQL Database

Com uma instância do Azure SQL Database, pode armazenar dados usando o Spring Cloud Azure.

Para instalar o módulo Spring Cloud Azure Starter, 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.

  • O artefato Spring Cloud Azure Starter:

    <dependency>
      <groupId>com.azure.spring</groupId>
      <artifactId>spring-cloud-azure-starter</artifactId>
    </dependency>
    

    Nota

    Como se trata de uma dependência, ela deve ser adicionada na <dependencies> seção do pom.xml. Sua versão não está configurada aqui, pois é gerenciada pela lista técnica que adicionamos anteriormente.

Configurar o Spring Boot para usar o Azure SQL Database

Para armazenar dados do Azure SQL Database usando o Spring Data JPA, siga estes passos para configurar a aplicação:

  1. Configure as credenciais da Base de Dados SQL do Azure no ficheiro de configuração application.properties.

    logging.level.org.hibernate.SQL=DEBUG
    
    spring.datasource.url=jdbc:sqlserver://sqlservertest.database.windows.net:1433;databaseName=demo;authentication=DefaultAzureCredential;
    
    spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.SQLServer2016Dialect
    spring.jpa.hibernate.ddl-auto=create-drop
    

    Aviso

    A propriedade de configuração spring.jpa.hibernate.ddl-auto=create-drop significa que o Spring Boot criará automaticamente um esquema de base de dados no arranque da aplicação e tentará eliminá-lo no encerramento. 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. 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