Usar o Spring Data JDBC 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 JDBC.

O JDBC é a API Java padrão para se conectar a bancos de dados relacionais tradicionais.

Neste tutorial, incluímos dois métodos de autenticação: autenticação do Microsoft Entra e autenticação do 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 se conectar ao Banco de Dados do Azure para Banco de Dados SQL usando identidades definidas na ID do Microsoft Entra. 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 do usuário. Como essas senhas são armazenadas no Banco de dados SQL, você mesmo precisa gerenciar a rotação das senhas.

Pré-requisitos

  • Utilitário sqlcmd.

  • Driver ODBC 17 ou 18.

  • Se você não tiver uma, crie uma instância do SQL Server do Azure nomeada sqlservertest e um banco de dados chamado demo. Para obter instruções, consulte Guia de início rápido: criar um único banco de dados - Banco de dados SQL do Azure.

  • 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 MS SQL Server Driver e, em seguida, selecione Java versão 8 ou superior.

Veja 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-jdbc-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 você estiver se conectando ao servidor do Banco de Dados SQL do Azure a partir do Windows Subsystem for Linux (WSL) em um computador Windows, será necessário adicionar a 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 demo banco de dados 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 Service Connector para criar um usuário administrador do Microsoft Entra para seu servidor do Banco de Dados SQL do Azure, conforme mostrado nas seguintes etapas:

  1. Primeiro, instale a extensão sem senha do Service Connector para a CLI do Azure:

    az extension add --name serviceconnector-passwordless --upgrade
    
  2. 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 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 Spring Cloud Azure.

Para instalar o módulo Spring Cloud Azure Starter, adicione as seguintes dependências ao arquivo pom.xml :

  • A lista de materiais do Spring Cloud Azure (BOM):

    <dependencyManagement>
      <dependencies>
        <dependency>
          <groupId>com.azure.spring</groupId>
          <artifactId>spring-cloud-azure-dependencies</artifactId>
          <version>5.11.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 como 4.17.0. Esta lista de materiais (BOM) deve ser configurada <dependencyManagement> na seção do arquivo pom.xml . Isso garante que todas as dependências do Spring Cloud Azure estejam usando a mesma versão. Para obter mais informações sobre a versão usada para esta 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>
    

    Observação

    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 BOM 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 JDBC, siga estas etapas para configurar o aplicativo:

  1. Configure credenciais do Banco de Dados SQL do Azure no arquivo de configuração application.properties .

    logging.level.org.springframework.jdbc.core=DEBUG
    
    spring.datasource.url=jdbc:sqlserver://sqlservertest.database.windows.net:1433;databaseName=demo;authentication=DefaultAzureCredential;
    
    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. Isso é ótimo para testes, mas lembre-se de que isso excluirá os dados a cada reinicialização. Portanto, você não deve usá-la em produção.

  1. Crie o arquivo de configuração src/main/resources/schema.sql para configurar o esquema de banco de dados e adicione o conteúdo a seguir.

    DROP TABLE IF EXISTS todo;
    CREATE TABLE todo (id INT IDENTITY PRIMARY KEY, description VARCHAR(255), details VARCHAR(4096), done BIT);
    
  1. Crie uma nova Todo classe Java. Essa classe é um modelo de domínio mapeado todo na tabela que será criado 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 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.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> {
    
    }
    

    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 Spring Cloud Azure usa DefaultAzureCredentialo , que a biblioteca de Identidade do Azure fornece para ajudá-lo a obter credenciais sem alterações de código.

    DefaultAzureCredential dá suporte a vários métodos de autenticação e determina qual método usar no runtime. Essa abordagem permite que seu aplicativo use métodos de autenticação diferentes 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 concluir a autenticação em ambientes de desenvolvimento local, 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 usar a identidade gerenciada atribuída pelo usuário. Para obter mais informações, confira O que são as identidades gerenciadas para recursos do Azure?

  3. Inicie o aplicativo. 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
    

Implantar no Azure Spring Apps

Agora que você tem o aplicativo Spring Boot em execução localmente, é hora de movê-lo para a produção. Os Aplicativos Spring do Azure facilitam a implantação de aplicativos Spring Boot no Azure sem alterações de 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.

Próximas etapas