Использование Spring Data JDBC с База данных SQL Azure

В этом руководстве показано, как хранить данные в База данных SQL Azure с помощью Spring Data JDBC.

JDBC — это стандартный API Java для подключения к традиционным реляционным базам данных.

В этом руководстве мы рассмотрим два метода проверки подлинности: Microsoft Entra аутентификацию и проверку подлинности базы данных SQL. На вкладке "Без пароля" отображается проверка подлинности Microsoft Entra, а на вкладке "Пароль" отображается проверка подлинности базы данных SQL.

Аутентификация Microsoft Entra — это механизм подключения к Azure SQL Database с использованием удостоверений, определенных в Microsoft Entra ID. С помощью проверки подлинности Microsoft Entra вы можете управлять удостоверениями пользователей базы данных и другими службами Microsoft в централизованном месте, что упрощает управление разрешениями.

Проверка подлинности в базе данных SQL использует учетные записи, хранящиеся там же. Если вы решили использовать пароли в качестве учетных данных для учетных записей, эти учетные данные будут храниться в таблице пользователя. Так как эти пароли хранятся в База данных SQL, вам нужно самостоятельно управлять сменой паролей.

Предварительные условия

См. пример приложения

В этом руководстве вы закодируем пример приложения. Если вы хотите добиться большей скорости, это приложение уже разработано и доступно по адресу https://github.com/Azure-Samples/quickstart-spring-data-jdbc-sql-server.

Настройка правила брандмауэра для сервера База данных SQL Azure

База данных SQL Azure экземпляры защищены по умолчанию. В них включен брандмауэр, который блокирует все входящие подключения.

Чтобы использовать базу данных, откройте брандмауэр сервера, чтобы разрешить локальный IP-адрес для доступа к серверу базы данных. Дополнительные сведения см. в разделе Tutorial: защита базы данных в База данных SQL Azure.

Если вы подключаетесь к серверу База данных SQL Azure из подсистема Windows для Linux (WSL) на компьютере Windows, необходимо добавить идентификатор узла WSL в брандмауэр.

Создание пользователя, отличного от администратора базы данных SQL, и предоставление разрешения

На этом шаге будет создан пользователь, отличный от администратора, и предоставят ему все разрешения для demo базы данных.

Сведения об использовании подключений без пароля см. в статье Tutorial: защита базы данных в База данных SQL Azure, или используйте соединитель службы для создания пользователя-администратора Microsoft Entra для сервера База данных SQL Azure, как показано в следующих шагах:

  1. Сначала установите расширение Service Connector без пароля для Azure CLI:

    az extension add --name serviceconnector-passwordless --upgrade
    
  2. Затем используйте следующую команду, чтобы создать пользователя 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
    

Созданный администратор Microsoft Entra является пользователем администратора базы данных SQL, поэтому вам не нужно создавать нового пользователя.

Внимание

Подключения к базе данных Azure SQL без пароля требуют обновления драйвера MS SQL Server до версии 12.1.0 или более поздней. Параметр подключения находится authentication=DefaultAzureCredential в версии 12.1.0 и authentication=ActiveDirectoryDefault в версии 12.2.0.

Хранение данных из База данных SQL Azure

С помощью экземпляра База данных SQL Azure можно хранить данные с помощью Spring Cloud Azure.

Чтобы установить модуль Spring Cloud Azure Starter, добавьте следующие зависимости в файл pom.xml:

  • Акт технических спецификаций Spring Cloud Azure (BOM):

    <dependencyManagement>
      <dependencies>
        <dependency>
          <groupId>com.azure.spring</groupId>
          <artifactId>spring-cloud-azure-dependencies</artifactId>
          <version>7.4.0</version>
          <type>pom</type>
          <scope>import</scope>
        </dependency>
      </dependencies>
    </dependencyManagement>
    

    Примечание.

    Если вы используете Spring Boot 4.0.x, установите для нее spring-cloud-azure-dependencies значение .7.4.0

    Если вы используете Spring Boot 3.5.x, установите для нее spring-cloud-azure-dependencies значение 6.5.0.

    Если вы используете Spring Boot 3.1.x-3.5.x, обязательно установите для нее версию spring-cloud-azure-dependencies на 5.25.0.

    Если вы используете Spring Boot 2.x, обязательно установите версию spring-cloud-azure-dependencies на 4.20.0.

    Эта ведомость материалов (BOM) должна быть сконфигурирована в <dependencyManagement> разделе файла pom.xml. Это гарантирует, что все зависимости Spring Cloud Azure используют одну и ту же версию.

    Дополнительные сведения о версии, используемой для этого BOM, см. в разделе Какую версию Spring Cloud Azure я должен использовать.

  • Артефакт Spring Cloud Azure Starter:

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

    Примечание.

    Так как это зависимость, ее следует добавить в <dependencies> разделе pom.xml. Версия программы не конфигурирована здесь, так как её управляет BOM, который мы добавили ранее.

Настройка Spring Boot для использования База данных SQL Azure

Чтобы сохранить данные из База данных SQL Azure с помощью Spring Data JDBC, выполните следующие действия, чтобы настроить приложение:

  1. Настройте учетные данные База данных SQL Azure в файле конфигурации 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
    

    Предупреждение

    Свойство spring.sql.init.mode=always конфигурации означает, что Spring Boot автоматически создает схему базы данных с помощью файла schema.sql , который будет создан далее, при каждом запуске сервера. Это очень удобно для тестирования, но при каждой перезагрузке все данные будут удаляться, поэтому не следует использовать этот подход в рабочей среде.

  1. Создайте файл конфигурации src/main/resources/schema.sql для настройки схемы базы данных, а затем добавьте следующее содержимое.

    DROP TABLE IF EXISTS todo;
    CREATE TABLE todo (id INT IDENTITY PRIMARY KEY, description VARCHAR(255), details VARCHAR(4096), done BIT);
    
  1. Создайте новый класс Todo Java. Этот класс представляет собой модель домена, сопоставленную с таблицей todo , которая будет создана автоматически Spring Boot. Следующий код игнорирует getters методы и 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. Измените файл класса запуска, чтобы отобразить следующее содержимое.

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

    Совет

    В этом руководстве нет операций проверки подлинности в конфигурациях или коде. Однако для подключения к службам Azure требуется проверка подлинности. Чтобы завершить проверку подлинности, необходимо использовать удостоверение Azure. Spring Cloud Azure использует DefaultAzureCredential, которую предоставляет библиотека удостоверений Azure для получения учетных данных без необходимости изменения кода.

    DefaultAzureCredential поддерживает несколько методов проверки подлинности и определяет, какой метод следует использовать во время выполнения. Этот подход позволяет приложению использовать различные методы проверки подлинности в разных средах (например, локальных и рабочих средах), не реализуя код, зависящий от среды. Дополнительные сведения см. в разделе DefaultAzureCredential.

    Для выполнения проверки подлинности в локальных средах разработки можно использовать Azure CLI, Visual Studio Code, PowerShell или другие методы. Дополнительные сведения см. в разделе аутентификация Azure в средах разработки на Java. Чтобы завершить проверку подлинности в средах размещения Azure, рекомендуется использовать управляемое удостоверение, назначаемое пользователем. Дополнительные сведения см. в разделе Управляемые удостоверения для ресурсов Azure?

  3. Запустите приложение. Приложение сохраняет данные в базе данных. Вы увидите журналы, аналогичные следующему примеру:

    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
    

Развертывание в Приложения Azure Spring

Теперь, когда у вас есть приложение Spring Boot, работающее локально, пришло время переместить его в рабочую среду. Приложения Azure Spring упрощает развертывание приложений Spring Boot для Azure без каких-либо изменений кода. Эта служба управляет инфраструктурой приложений Spring, благодаря чему разработчики могут сосредоточиться на коде. Приложения Azure Spring обеспечивает управление жизненным циклом с помощью комплексного мониторинга и диагностики, управления конфигурацией, обнаружения служб, интеграции CI/CD, развертывания по схеме blue-green и прочее. Чтобы развернуть ваше приложение в Приложения Azure Spring, см. раздел Как развернуть первое приложение в Приложения Azure Spring.

Следующие шаги