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

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

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

Azure SQL база данных также поддерживает проверку подлинности Azure Active Directory (Azure AD). Azure AD проверка подлинности — это механизм подключения к базе данных Azure SQL с помощью удостоверений, определенных в Azure AD. С помощью проверки подлинности Azure AD можно централизованно управлять удостоверениями пользователей базы данных и другими службами Майкрософт, что упрощает работу с разрешениями. С помощью Azure AD проверки подлинности можно установить подключение без пароля. Дополнительные сведения о развертывании приложения Spring Data в Azure Spring Apps и использовании управляемого удостоверения см. в статье Руководство. Развертывание приложения Spring в Azure Spring Apps с подключением без пароля к базе данных Azure.

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

  • Учетная запись Azure. Если у вас ее нет, получите бесплатную пробную версию.
  • Требуется Azure Cloud Shell или Azure CLI 2.37.0 или более поздней версии. Мы рекомендуем использовать Azure Cloud Shell, так вы автоматически войдете в систему и получите доступ ко всем необходимым средствам.
  • Если вы используете компьютер Windows и хотите запустить примеры локально, установите и используйте последнюю версию подсистема Windows для Linux (WSL).
  • Клиент командной строки MySQL. Вы можете подключиться к серверу с помощью популярного клиентского средства mysql.exe программы командной строки с azure Cloud Shell. Кроме того, можно использовать командную строку MySQL в локальной среде.
  • Поддерживаемый пакет средств разработки Java версии 8 или более поздней. (17 или более предпочтительнее. JDK входит в состав Azure Cloud Shell). Мы рекомендуем установить Сборку Microsoft OpenJDK.
  • Apache Maven версии 3 или более поздней.
  • Клиент Git.
  • cURL или подобная служебная HTTP-программа, с помощью которой можно протестировать функциональные возможности.

Пример приложения

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

Подготовка среды выполнения

Сначала настройте некоторые переменные среды с помощью следующих команд:

export AZ_RESOURCE_GROUP=database-workshop
export AZ_DATABASE_NAME=<YOUR_DATABASE_NAME>
export AZ_LOCATION=<YOUR_AZURE_REGION>
export AZ_SQL_SERVER_USERNAME=spring
export AZ_SQL_SERVER_PASSWORD=<YOUR_AZURE_SQL_PASSWORD>
export AZ_LOCAL_IP_ADDRESS=<YOUR_LOCAL_IP_ADDRESS>

Замените заполнители следующими значениями, которые используются в этой статье:

  • <YOUR_DATABASE_NAME>: имя сервера базы данных Azure SQL, которое должно быть уникальным в Azure.
  • <YOUR_AZURE_REGION>: регион Azure, который вы будете использовать. Вы можете использовать eastus по умолчанию, но мы рекомендуем настроить регион, расположенный близко к месту проживания. Полный список доступных регионов можно получить, введя az account list-locations.
  • <AZ_SQL_SERVER_PASSWORD>: Пароль для сервера Базы данных SQL Azure. Такой пароль должен содержать не менее восьми символов и включать знаки всех следующих типов: прописные латинские буквы, строчные латинские буквы, цифры (0–9) и небуквенно-цифровые знаки (!, $, #, % и т. д.).
  • <YOUR_LOCAL_IP_ADDRESS>: IP-адрес локального компьютера, с которого будет запускаться приложение Spring Boot. Одним из удобных способов его поиска является ввод в обозревателе адреса whatismyip.akamai.com.

Чтобы создать группу ресурсов, выполните следующую команду:

az group create \
    --name $AZ_RESOURCE_GROUP \
    --location $AZ_LOCATION \
    --output tsv

Создание экземпляра Базы данных SQL Azure

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

Примечание

Пароль MS SQL должен соответствовать определенным критериям, и установка завершится сбоем с несоответствующим паролем. Дополнительные сведения см. в разделе Политика паролей.

az sql server create \
    --resource-group $AZ_RESOURCE_GROUP \
    --name $AZ_DATABASE_NAME \
    --location $AZ_LOCATION \
    --admin-user $AZ_SQL_SERVER_USERNAME \
    --admin-password $AZ_SQL_SERVER_PASSWORD \
    --output tsv

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

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

Так как вы настроили локальный IP-адрес ранее, вы можете открыть брандмауэр сервера, выполнив следующую команду:

az sql server firewall-rule create \
    --resource-group $AZ_RESOURCE_GROUP \
    --name $AZ_DATABASE_NAME-database-allow-local-ip \
    --server $AZ_DATABASE_NAME \
    --start-ip-address $AZ_LOCAL_IP_ADDRESS \
    --end-ip-address $AZ_LOCAL_IP_ADDRESS \
    --output tsv

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

Получите IP-адрес хост-компьютера, выполнив следующую команду в WSL:

cat /etc/resolv.conf

Скопируйте IP-адрес, следующий за термином nameserver, а затем используйте следующую команду, чтобы задать переменную среды для IP-адреса WSL:

AZ_WSL_IP_ADDRESS=<the-copied-IP-address>

Затем используйте следующую команду, чтобы открыть брандмауэр сервера для приложения на основе WSL:


az sql server firewall-rule create \
    --resource-group $AZ_RESOURCE_GROUP \
    --name $AZ_DATABASE_NAME-database-allow-local-ip-wsl \
    --server $AZ_DATABASE_NAME \
    --start-ip-address $AZ_WSL_IP_ADDRESS \
    --end-ip-address $AZ_WSL_IP_ADDRESS \
    --output tsv

Настройка базы данных Azure SQL

Сервер Базы данных SQL Azure, который вы создали ранее, сейчас пустой. На нем отсутствует база данных, которую можно использовать с приложением Spring Boot. Создайте базу данных с именем demo, выполнив следующую команду:

az sql db create \
    --resource-group $AZ_RESOURCE_GROUP \
    --name demo \
    --server $AZ_DATABASE_NAME \
    --output tsv

Создание приложения с помощью Spring Initializr

Создайте приложение в командной строке с помощью следующей команды:

curl https://start.spring.io/starter.tgz -d dependencies=web,data-jdbc,sqlserver -d baseDir=azure-database-workshop -d bootVersion=2.7.7 -d javaVersion=1.8 | tar -xzvf -

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

Откройте файл src/main/resources/application.properties и добавьте следующий текст:

logging.level.org.springframework.jdbc.core=DEBUG

spring.datasource.url=jdbc:sqlserver://${AZ_DATABASE_NAME}.database.windows.net:1433;database=demo;encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30;
spring.datasource.username=spring@${AZ_DATABASE_NAME}
spring.datasource.password=${AZ_SQL_SERVER_PASSWORD}

spring.sql.init.mode=always

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

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

Теперь вы можете запустить приложение с помощью предоставленной программы-оболочки Maven:

./mvnw spring-boot:run

Ниже приведен снимок экрана приложения, выполняемого в первый раз:

Снимок экрана: работающее приложение.

Создание схемы базы данных

Spring Boot будет автоматически выполнять 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);

Остановите приложение и запустите его снова с помощью следующей команды. Теперь приложение будет использовать созданную ранее базу данных demo и создаст в ней таблицу todo.

./mvnw spring-boot:run

Добавление кода приложения

Затем добавьте код Java, который будет использовать JDBC для хранения данных на сервере Базы данных SQL Azure и их извлечения из него.

Создайте новый класс Java Todo рядом с классом DemoApplication и добавьте следующий код:

package com.example.demo;

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;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getDetails() {
        return details;
    }

    public void setDetails(String details) {
        this.details = details;
    }

    public boolean isDone() {
        return done;
    }

    public void setDone(boolean done) {
        this.done = done;
    }
}

Этот класс является моделью предметной области, сопоставленной с таблицей todo, созданной ранее.

Для управления этим классом потребуется репозиторий. Определите новый интерфейс TodoRepository в том же пакете:

package com.example.demo;

import org.springframework.data.repository.CrudRepository;

public interface TodoRepository extends CrudRepository<Todo, Long> {
}

Этим репозиторием управляет Spring Data JDBC.

Завершите работу приложения, создав контроллер, который может хранить и извлекать данные. Реализуйте класс TodoController в том же пакете и добавьте следующий код:

package com.example.demo;

import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/")
public class TodoController {

    private final TodoRepository todoRepository;

    public TodoController(TodoRepository todoRepository) {
        this.todoRepository = todoRepository;
    }

    @PostMapping("/")
    @ResponseStatus(HttpStatus.CREATED)
    public Todo createTodo(@RequestBody Todo todo) {
        return todoRepository.save(todo);
    }

    @GetMapping("/")
    public Iterable<Todo> getTodos() {
        return todoRepository.findAll();
    }
}

Остановите приложение и запустите его снова с помощью следующей команды:

./mvnw spring-boot:run

Тестирование приложения

Чтобы протестировать приложение, можно использовать cURL.

Сначала создайте новый элемент todo в базе данных с помощью следующей команды:

curl --header "Content-Type: application/json" \
    --request POST \
    --data '{"description":"configuration","details":"congratulations, you have set up JDBC correctly!","done": "true"}' \
    http://127.0.0.1:8080

Эта команда должна возвращать созданный элемент:

{"id":1,"description":"configuration","details":"congratulations, you have set up JDBC correctly!","done":true}

Затем извлеките данные, используя новый запрос cURL:

curl http://127.0.0.1:8080

Эта команда вернет список элементов todo, включая созданный вами элемент:

[{"id":1,"description":"configuration","details":"congratulations, you have set up JDBC correctly!","done":true}]

Ниже приведен снимок экрана с этими запросами cURL:

Снимок экрана: тест cURL.

Поздравляем! Вы создали приложение Spring Boot, которое использует JDBC для сохранения данных в Базе данных SQL Azure и их извлечения из нее.

Очистка ресурсов

Чтобы очистить все ресурсы, используемые во время этого краткого руководства, удалите группу ресурсов с помощью следующей команды:

az group delete \
    --name $AZ_RESOURCE_GROUP \
    --yes

Дальнейшие действия

Дополнительные сведения о развертывании приложения Spring Data в Azure Spring Apps и использовании управляемого удостоверения см. в статье Руководство. Развертывание приложения Spring в Azure Spring Apps с подключением без пароля к базе данных Azure.

Дополнительные сведения о Spring и Azure см. в центре документации об использовании Spring в Azure.

Дополнительные ресурсы

Дополнительные сведения о JDBC для Spring Data см. в справочной документации по Spring.

См. сведения об использовании Java в Azure в руководствах по использованию Azure для разработчиков Java и Azure DevOps и Java.