Uso de Spring Data JPA con Azure SQL Database

En este tutorial se muestra cómo almacenar datos en Azure SQL Database mediante Spring Data JPA.

Java Persistence API (JPA) es la API de Java estándar para la asignación relacional de objetos.

En este tutorial, se incluyen dos métodos de autenticación: autenticación de Microsoft Entra y autenticación de SQL Database. La pestaña Sin contraseña muestra la autenticación de Microsoft Entra y la pestaña Contraseña muestra la autenticación de SQL Database.

La autenticación de Microsoft Entra es un mecanismo para conectarse a Azure Database for SQL Database mediante identidades definidas en microsoft Entra ID. Con la autenticación de Microsoft Entra, puede administrar las identidades de los usuarios de la base de datos y otros servicios de Microsoft en una ubicación central, lo que simplifica la administración de los permisos.

La autenticación de SQL Database usa cuentas almacenadas en SQL Database. Si decide usar contraseñas como credenciales para las cuentas, estas credenciales se almacenarán en la tabla de usuarios. Dado que estas contraseñas se almacenan en SQL Database, debe administrar la rotación de las contraseñas por su cuenta.

Requisitos previos

  • Utilidad sqlcmd

  • Controlador ODBC 17 o 18.

  • Si no tiene una, cree una instancia de Azure SQL Server denominada sqlservertest y una base de datos denominada demo. Para obtener instrucciones, consulte Inicio rápido: Creación de una base de datos única: Azure SQL Database.

  • Si no tiene una aplicación de Spring Boot, cree un proyecto de Maven con Spring Initializr. Asegúrese de seleccionar Maven Project (Proyecto de Maven) y, en Dependencias, agregue Spring Web, Spring Data JPA y MS SQL Server Driver dependencies (Dependencias de Spring Web, Spring Data JPA y MS SQL Server Driver) y, a continuación, seleccione Java versión 8 o posterior.

Importante

Para usar conexiones sin contraseña, actualice MS SQL Server Driver a versión 12.1.0 o superior y, a continuación, cree un usuario administrador de Microsoft Entra para la instancia del servidor de Azure SQL Database. Para obtener más información, consulte la sección Creación de un administrador de Microsoft Entra de Tutorial: Protección de una base de datos en Azure SQL Database.

Consulte la aplicación de ejemplo.

En este tutorial, codificará una aplicación de ejemplo. Si desea ir más rápido, esta aplicación ya está codificada y disponible en https://github.com/Azure-Samples/quickstart-spring-data-jpa-sql-server.

Configuración de una regla de firewall para el servidor de Azure SQL Database

De forma predeterminada, las instancias de Azure SQL Database están protegidas. Tienen un firewall que no permite ninguna conexión entrante.

Para poder usar la base de datos, abra el firewall del servidor para permitir que la dirección IP local acceda al servidor de bases de datos. Para más información, consulte Tutorial: Protección de una base de datos en Azure SQL Database.

Si se conecta al servidor de Azure SQL Database desde Subsistema de Windows para Linux (WSL) en un equipo Windows, debe agregar el identificador de host de WSL al firewall.

Creación de un usuario que no es administrador de SQL Database y concesión de permiso

En este paso se creará un usuario que no es administrador y se concederán todos los permisos en la demo base de datos.

Para usar conexiones sin contraseña, consulte Tutorial: Protección de una base de datos en Azure SQL Database o uso de Service Conectar or para crear un usuario administrador de Microsoft Entra para el servidor de Azure SQL Database, como se muestra en los pasos siguientes:

  1. En primer lugar, instale la extensión Service Conectar or passwordless para la CLI de Azure:

    az extension add --name serviceconnector-passwordless --upgrade
    
  2. A continuación, use el siguiente comando para crear el usuario que no es administrador de 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
    

El administrador de Microsoft Entra que creó es un usuario administrador de SQL Database, por lo que no es necesario crear un nuevo usuario.

Importante

Las conexiones sin contraseña de Azure SQL Database requieren la actualización del controlador de MS SQL Server a la versión 12.1.0 o superior. La opción de conexión está authentication=DefaultAzureCredential en la versión 12.1.0 y authentication=ActiveDirectoryDefault en la versión 12.2.0.

Almacenamiento de datos de Azure SQL Database

Con una instancia de Azure SQL Database, puede almacenar datos mediante Spring Cloud Azure.

Para instalar el módulo Spring Cloud Azure Starter, agregue las siguientes dependencias al archivo pom.xml :

  • La lista de materiales (BOM) de Azure de Spring Cloud:

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

    Nota:

    Si usa Spring Boot 2.x, asegúrese de establecer la spring-cloud-azure-dependencies versión 4.17.0en . Esta lista de materiales (BOM) debe configurarse en la <dependencyManagement> sección del archivo pom.xml . Esto garantiza que todas las dependencias de Azure de Spring Cloud usen la misma versión. Para obtener más información sobre la versión que se usa para esta lista de materiales, consulte La versión de Spring Cloud que se debe usar en Azure.

  • Artefacto de Spring Cloud Azure Starter:

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

    Nota:

    Como se trata de una dependencia, se debe agregar en la <dependencies> sección del pom.xml. Su versión no está configurada aquí, ya que está administrada por la BOM que agregamos anteriormente.

Configuración de Spring Boot para usar Azure SQL Database

Para almacenar datos de Azure SQL Database mediante Spring Data JPA, siga estos pasos para configurar la aplicación:

  1. Configure las credenciales de Azure SQL Database en el archivo de configuración 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
    

    Advertencia

    La propiedad de configuración spring.jpa.hibernate.ddl-auto=create-drop significa que Spring Boot creará automáticamente un esquema de base de datos al inicio de la aplicación e intentará eliminarlo cuando se cierre. Esta característica es excelente para las pruebas, pero recuerde que eliminará los datos en cada reinicio, por lo que no debe usarlo en producción.

  1. Cree una nueva Todo clase de Java. Esta clase es un modelo de dominio asignado a la todo tabla que JPA creará automáticamente. El código siguiente omite los getters métodos y 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 el archivo de clase de inicio para mostrar el siguiente contenido.

    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> {
    
    }
    

    Sugerencia

    En este tutorial, no hay ninguna operación de autenticación en las configuraciones ni en el código. Sin embargo, la conexión a los servicios de Azure requiere autenticación. Para completar la autenticación, debe usar Azure Identity. Spring Cloud Azure usa DefaultAzureCredential, que la biblioteca de identidades de Azure proporciona para ayudarle a obtener credenciales sin cambios en el código.

    DefaultAzureCredential admite varios métodos de autenticación y determina qué método se usa en tiempo de ejecución. Este enfoque permite a la aplicación usar diferentes métodos de autenticación en distintos entornos (como entornos locales y de producción) sin implementar código específico del entorno. Para obtener más información, vea DefaultAzureCredential.

    Para completar la autenticación en entornos de desarrollo local, puede usar la CLI de Azure, Visual Studio Code, PowerShell u otros métodos. Para más información, consulte Autenticación de Azure en entornos de desarrollo de Java. Para completar la autenticación en entornos de hospedaje de Azure, se recomienda usar la identidad administrada asignada por el usuario. Para obtener más información, consulte ¿Qué son las identidades administradas para recursos de Azure?

  3. Inicie la aplicación. Verá registros similares al ejemplo siguiente:

    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
    

Implementación en Azure Spring Apps

Ahora que tiene la aplicación Spring Boot que se ejecuta localmente, es el momento de moverla a producción. Azure Spring Apps facilita la implementación de aplicaciones de Spring Boot en Azure sin cambios en el código. El servicio administra la infraestructura de las aplicaciones de Spring, con el fin de que los desarrolladores puedan centrarse en el código. Azure Spring Apps proporciona administración del ciclo de vida mediante el uso de una supervisión y un diagnóstico completos, administración de la configuración, detección de servicios, integración de CI/CD e implementaciones azul-verde, entre otros. Para implementar la aplicación en Azure Spring Apps, consulte Implementación de la primera aplicación en Azure Spring Apps.

Pasos siguientes