Usar o Spring Data JPA com o Banco de Dados SQL do Azure
Este tutorial demonstra como armazenar dados no Banco de Dados SQL do Azure usando o Spring Data JPA.
A JPA (API de Persistência Java) é a API Java padrão para o mapeamento relacional de objeto.
Neste tutorial, incluímos dois métodos de autenticação: autenticação Microsoft Entra e autenticação de banco de dados SQL. A guia Sem senha mostra a autenticação do Microsoft Entra e a guia Senha mostra a autenticação do Banco de Dados SQL.
A autenticação do Microsoft Entra é um mecanismo para conexão com o Banco de Dados do Azure para Banco de Dados SQL usando identidades definidas no Microsoft Entra ID. Com a autenticação do Microsoft Entra, você pode gerenciar as identidades de usuários do banco de dados e outros serviços da Microsoft em uma só localização central, o que simplifica o gerenciamento 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 de usuários. Como essas senhas são armazenadas no Banco de Dados SQL, você precisa gerenciar a rotação das senhas por conta própria.
Pré-requisitos
Uma assinatura do Azure – crie uma gratuitamente.
Java Development Kit (JDK), versão 8 ou superior.
Driver ODBC 17 ou 18.
Se você não tiver uma, crie uma instância do SQL Server do Azure chamada
sqlservertest
e um banco de dados chamadodemo
. Para obter mais instruções, consulte Início Rápido: criar um banco de dados individual, Banco de Dados SQL do Azure.Se você não tiver um aplicativo do Spring Boot, crie um projeto do Maven com o Spring Initializr. Certifique-se de selecionar Projeto Maven e, em Dependências, adicione as dependências Spring Web, Spring Data JPA e driver MS SQL Server, e, em seguida, selecione Java versão 8 ou superior.
Importante
Para usar conexões sem senha, atualize o driver do MS SQL Server para a versão 12.1.0
ou superior, e em seguida crie um usuário administrador do Microsoft Entra para sua instância de servidor do Banco de Dados SQL do Azure. Para obter mais informações, consulte a seção Criar um administrador do Microsoft Entra do Tutorial: proteger um banco de dados no Banco deDados SQL do Azure.
Consulte o aplicativo de exemplo
Neste tutorial, você codificará um aplicativo de exemplo. Caso você queira adiantar o processo, esse aplicativo já está codificado e disponível em https://github.com/Azure-Samples/quickstart-spring-data-jpa-sql-server.
Configurar uma regra de firewall para o servidor do Banco de Dados SQL do Azure
As instâncias do Banco de Dados SQL do Azure são protegidas por padrão. Elas têm um firewall que não permite nenhuma conexã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 obter mais informações, consulte Tutorial: proteger um banco de dados no Banco de Dados SQL do Azure.
Se estiver se conectando ao servidor do Banco de Dados SQL do Azure a partir do Subsistema do Windows para Linux (WSL) em um computador Windows, será necessário adicionar o ID do host WSL ao 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 banco de dados demo
a ele.
Para usar conexões sem senha, consulte Tutorial: proteger um banco de dados no Banco de Dados SQL do Azure ou usar o Conector do Serviço para criar um usuário administrador do Microsoft Entra para o servidor do Banco de Dados SQL do Azure, conforme mostrado nas seguintes etapas:
Primeiro, instale a extensão sem senha do Conector de Serviço para a CLI do Azure:
az extension add --name serviceconnector-passwordless --upgrade
Em seguida, use o seguinte comando para criar o usuário 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 do Microsoft Entra que você criou é um usuário administrador do banco de dados SQL, portanto, você não precisa criar um novo usuário.
Importante
As conexões sem senha do banco de dados SQL do Azure exigem a atualização do driver do 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 os dados do Banco de Dados SQL do Azure
Com uma instância do Banco de Dados SQL do Azure, você pode armazenar dados usando o Azure Spring Cloud.
Para instalar o módulo do Iniciador do Azure Spring Cloud, adicione as seguintes dependências ao arquivo pom.xml:
A lista de materiais (BOM) do Azure Spring Cloud:
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>5.19.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
Observação
Se você estiver usando o Spring Boot 2.x, certifique-se de definir a
spring-cloud-azure-dependencies
versão como4.19.0
. Esta lista de materiais (BOM) deve ser configurada na<dependencyManagement>
seção do arquivo pom.xml. Isso garante que todas as dependências do Azure Spring Cloud estejam usando a mesma versão. Para obter mais informações sobre a versão usada para esta BOM, consulte Qual versão do Azure Spring Cloud devo usar.O artefato Iniciador do Azure Spring Cloud:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter</artifactId> </dependency>
Observação
Como se trata de uma dependência, ela deve ser adicionada na seção
<dependencies>
do pom.xml. Sua versão não está configurada aqui, pois é gerenciada pela lista de materiais que adicionamos anteriormente.
Configurar o Spring Boot para usar o Banco de Dados SQL do Azure
Para armazenar dados do Banco de Dados SQL do Azure usando o Spring Data JPA, siga estas etapas para configurar o aplicativo:
Configure credenciais do Banco de Dados SQL do Azure no arquivo 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 banco de dados na inicialização do aplicativo e tentará excluí-lo quando for desligado. Esse recurso é ótimo para testes, mas lembre-se de que ele excluirá seus dados a cada reinicialização, portanto, não deve ser usado na produção.
Crie uma nova classe Java
Todo
. Essa classe é um modelo de domínio mapeado para a tabelatodo
, que será criada automaticamente pela JPA. O código a seguir ignora os métodosgetters
esetters
.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; }
Edite o arquivo de classe de inicialização para mostrar o conteúdo a seguir.
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> { }
Dica
Neste tutorial, não há operações de autenticação nas configurações ou no código. No entanto, a conexão com os serviços do Azure requer autenticação. Para concluir a autenticação, você precisa usar a Identidade do Azure. O Azure Spring Cloud usa
DefaultAzureCredential
, que a biblioteca Azure Identity fornece para ajudá-lo a obter credenciais sem nenhuma alteração de código.DefaultAzureCredential
dá suporte a vários métodos de autenticação e determina qual método usar no runtime. Essa abordagem habilita seu aplicativo a usar diferentes métodos de autenticação em diferentes ambientes, como ambientes locais e de produção, sem implementar código específico do ambiente. Para obter mais informações, consulte DefaultAzureCredential.Para concluir a autenticação em ambientes de desenvolvimento locais, você pode usar a CLI do Azure, o Visual Studio Code, o PowerShell ou outros métodos. Para obter mais informações, consulte Autenticação do Azure em ambientes de desenvolvimento Java. Para concluir a autenticação em ambientes de hospedagem do Azure, recomendamos o uso de identidade gerenciada atribuída pelo usuário. Para obter mais informações, confira O que são as identidades gerenciadas para recursos do Azure?
Inicie o aplicativo. Você verá logs semelhantes ao seguinte exemplo:
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
Implantar no Azure Spring Apps
Agora que você tem o aplicativo Spring Boot em execução localmente, é hora de movê-lo para produção. Os Aplicativos Spring do Azure facilita a implantação de aplicativos Spring Boot no Azure sem nenhuma alteração no código. O serviço gerencia a infraestrutura dos aplicativos do Spring para que os desenvolvedores possam se concentrar no código. O Azure Spring Apps fornece gerenciamento de ciclo de vida usando monitoramento e diagnóstico abrangentes, gerenciamento de configuração, descoberta de serviços, integração de CI/CD, implantações em “blue-green” e muito mais. Para implantar seu aplicativo nos Aplicativos Spring do Azure, consulte Implantar seu primeiro aplicativo nos Aplicativos Spring do Azure.