Использование JDBC Spring Data с Базой данных Azure для MySQL
В этом руководстве показано, как хранить данные в базе данных База данных Azure для MySQL с помощью JDBC Spring Data.
JDBC — это стандартный API Java для подключения к стандартным реляционным базам данных.
В этом руководстве мы рассмотрим два метода проверки подлинности: проверку подлинности Microsoft Entra и проверку подлинности MySQL. На вкладке "Без пароля" показана проверка подлинности Microsoft Entra, а на вкладке "Пароль " отображается проверка подлинности MySQL.
Проверка подлинности Microsoft Entra — это механизм подключения к База данных Azure для MySQL с помощью удостоверений, определенных в идентификаторе Microsoft Entra. С помощью проверки подлинности Microsoft Entra можно управлять удостоверениями пользователей базы данных и другими службы Майкрософт в центральном расположении, что упрощает управление разрешениями.
Проверка подлинности MySQL использует учетные записи, хранящиеся в MySQL. Если вы решили использовать пароли в качестве учетных данных для учетных записей, эти учетные данные будут храниться в user
таблице. Так как эти пароли хранятся в MySQL, вам нужно самостоятельно управлять сменой паролей.
Необходимые компоненты
Подписка Azure — создайте бесплатную учетную запись.
Пакет средств разработки Java (JDK) версии 8 или более поздней.
Клиент командной строки MySQL.
Если у вас нет приложения Spring Boot, создайте проект Maven с помощью Spring Initializr. Обязательно выберите Проект Maven и в разделе Зависимостей добавьте зависимости Spring Web, Spring Data JDBC и MySQL Driver , а затем выберите Java версии 8 или более поздней.
- Если у вас нет этого экземпляра, создайте База данных Azure для MySQL экземпляр
mysqlflexibletest
гибкого сервера. Инструкции см. в кратком руководстве по созданию гибкого сервера База данных Azure для MySQL с помощью портал Azure. Затем создайте базу данных с именемdemo
. Инструкции см. в статье "Создание баз данных и управление ими" для База данных Azure для MySQL гибкого сервера.
См. пример приложения
В этом руководстве вы закодируем пример приложения. Если вы хотите ускорить работу, готовое приложение доступно здесь: https://github.com/Azure-Samples/quickstart-spring-data-jdbc-mysql.
Настройка правила брандмауэра для сервера MySQL
Экземпляры Базы данных Azure для MySQL по умолчанию защищены. В них включен брандмауэр, который блокирует все входящие подключения.
Чтобы использовать базу данных, откройте брандмауэр сервера, чтобы разрешить локальный IP-адрес для доступа к серверу базы данных. Дополнительные сведения см. в статье "Управление правилами брандмауэра для База данных Azure для MySQL — гибкий сервер с помощью портал Azure".
Если вы подключаетесь к серверу MySQL из подсистема Windows для Linux (WSL) на компьютере Windows, необходимо добавить IP-адрес узла WSL в брандмауэр.
Создание пользователя, отличного от администратора MySQL, и предоставление разрешений
На этом шаге будет создан пользователь, отличный от администратора, и предоставят ему все разрешения для demo
базы данных.
Для создания пользователя без пароля можно использовать следующий метод.
Используйте следующую команду, чтобы установить расширение Service Connector без пароля для Azure CLI:
az extension add --name serviceconnector-passwordless --upgrade
Используйте следующую команду, чтобы создать пользователя, отличного от администратора Microsoft Entra:
az connection create mysql-flexible \ --resource-group <your_resource_group_name> \ --connection mysql_conn \ --target-resource-group <your_resource_group_name> \ --server mysqlflexibletest \ --database demo \ --user-account mysql-identity-id=/subscriptions/<your_subscription_id>/resourcegroups/<your_resource_group_name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<your_user_assigned_managed_identity_name> \ --query authInfo.userName \ --output tsv
Когда команда завершится, запишите имя пользователя в выходных данных консоли.
Хранение данных из База данных Azure для MySQL
Теперь, когда у вас есть База данных Azure для MySQL гибкий экземпляр сервера, можно хранить данные с помощью Spring Cloud Azure.
Чтобы установить модуль Azure Starter JDBC MySQL Spring Cloud, добавьте следующие зависимости в файл pom.xml :
Выставление счетов за материалы Spring Cloud (BOM):
<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>
Примечание.
Если вы используете Spring Boot 2.x, обязательно установите для нее
spring-cloud-azure-dependencies
значение4.19.0
. Этот счет материалов (BOM) должен быть настроен в<dependencyManagement>
разделе pom.xml файла. Это гарантирует, что все зависимости Azure Spring Cloud используют одну и ту же версию. Дополнительные сведения о версии, используемой для этого BOM, см. в статье "Какая версия Spring Cloud Azure должна использоваться".Артефакт Azure Starter JDBC MySQL Spring Cloud:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-jdbc-mysql</artifactId> </dependency>
Примечание.
С версии 4.5.0
поддерживаются бессерверные подключения.
Настройка Spring Boot для использования Базы данных Azure для MySQL
Чтобы сохранить данные из База данных Azure для MySQL с помощью Spring Data JDBC, выполните следующие действия, чтобы настроить приложение:
Настройте учетные данные База данных Azure для MySQL, добавив следующие свойства в файл конфигурации application.properties.
logging.level.org.springframework.jdbc.core=DEBUG spring.datasource.url=jdbc:mysql://mysqlflexibletest.mysql.database.azure.com:3306/demo?serverTimezone=UTC spring.datasource.username=<your_mysql_ad_non_admin_username> spring.datasource.azure.passwordless-enabled=true spring.sql.init.mode=always
Предупреждение
Свойство
spring.sql.init.mode=always
конфигурации означает, что Spring Boot автоматически создает схему базы данных с помощью файла schema.sql , который будет создан далее, при каждом запуске сервера. Эта функция отлично подходит для тестирования, но помните, что данные будут удалены при каждом перезапуске, поэтому его не следует использовать в рабочей среде.Свойство
spring.datasource.url
конфигурации добавлено?serverTimezone=UTC
, чтобы сообщить драйверу JDBC использовать формат даты UTC (или универсальное время координированного времени) при подключении к базе данных. Без этого параметра сервер Java не будет использовать тот же формат даты, что и база данных, что приведет к ошибке.
- Если у вас нет одного, создайте База данных Azure для MySQL экземпляр одного сервера с именем
mysqlsingletest
. Инструкции см. в кратком руководстве. Создание сервера База данных Azure для MySQL с помощью портал Azure. Затем создайте базу данных с именемdemo
. Инструкции см. в разделе "Создание базы данных" в разделе "Создание пользователей" в База данных Azure для MySQL.
См. пример приложения
В этой статье вы закодируем пример приложения. Если вы хотите ускорить работу, готовое приложение доступно здесь: https://github.com/Azure-Samples/quickstart-spring-data-jdbc-mysql.
Настройка правила брандмауэра для сервера MySQL
Экземпляры Базы данных Azure для MySQL по умолчанию защищены. В них включен брандмауэр, который блокирует все входящие подключения.
Чтобы использовать базу данных, откройте брандмауэр сервера, чтобы разрешить локальный IP-адрес для доступа к серверу базы данных. Дополнительные сведения см. в статье "Создание правил брандмауэра База данных Azure для MySQL и управление ими с помощью портал Azure".
Если вы подключаетесь к серверу MySQL из подсистема Windows для Linux (WSL) на компьютере Windows, необходимо добавить IP-адрес узла WSL в брандмауэр.
Создание пользователя, отличного от администратора MySQL, и предоставление разрешений
На этом шаге будет создан пользователь, отличный от администратора, и предоставят ему все разрешения для demo
базы данных.
Внимание
Чтобы использовать бессерверные подключения, создайте пользователя администратора Microsoft Entra для вашего База данных Azure для MySQL экземпляра. Дополнительные сведения см. в разделе "Настройка пользователя администратора Microsoft Entra Admin" в разделе "Использование идентификатора Microsoft Entra ID для проверки подлинности с помощью MySQL".
Создайте скрипт SQL с именем create_ad_user.sql для создания пользователя без администратора. Добавьте следующее содержимое и сохраните его локально:
export AZ_MYSQL_AD_NON_ADMIN_USERID=$(az ad signed-in-user show --query id --output tsv)
cat << EOF > create_ad_user.sql
SET aad_auth_validate_oids_in_tenant = OFF;
CREATE AADUSER '<your_mysql_ad_non_admin_username>' IDENTIFIED BY '$AZ_MYSQL_AD_NON_ADMIN_USERID';
GRANT ALL PRIVILEGES ON demo.* TO '<your_mysql_ad_non_admin_username>'@'%';
FLUSH privileges;
EOF
Затем выполните следующую команду, чтобы запустить скрипт SQL для создания пользователя, отличного от администратора Microsoft Entra:
mysql -h mysqlsingletest.mysql.database.azure.com --user <your_mysql_ad_admin_username>@mysqlsingletest --enable-cleartext-plugin --password=$(az account get-access-token --resource-type oss-rdbms --output tsv --query accessToken) < create_ad_user.sql
Совет
Чтобы использовать проверку подлинности Microsoft Entra для подключения к База данных Azure для MySQL, необходимо войти с помощью настроенного пользователя администратора Microsoft Entra, а затем получить маркер доступа в качестве пароля. Дополнительные сведения см. в разделе "Использование идентификатора Microsoft Entra для проверки подлинности с помощью MySQL".
Хранение данных из База данных Azure для MySQL
Теперь, когда у вас есть экземпляр одного сервера База данных Azure для MySQL, данные можно хранить с помощью Spring Cloud Azure.
Чтобы установить модуль Azure Starter JDBC MySQL Spring Cloud, добавьте следующие зависимости в файл pom.xml :
Выставление счетов за материалы Spring Cloud (BOM):
<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>
Примечание.
Если вы используете Spring Boot 2.x, обязательно установите для нее
spring-cloud-azure-dependencies
значение4.19.0
. Этот счет материалов (BOM) должен быть настроен в<dependencyManagement>
разделе pom.xml файла. Это гарантирует, что все зависимости Azure Spring Cloud используют одну и ту же версию. Дополнительные сведения о версии, используемой для этого BOM, см. в статье "Какая версия Spring Cloud Azure должна использоваться".Артефакт Azure Starter JDBC MySQL Spring Cloud:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-jdbc-mysql</artifactId> </dependency>
Примечание.
С версии 4.5.0
поддерживаются бессерверные подключения.
Настройка Spring Boot для использования Базы данных Azure для MySQL
Чтобы сохранить данные из База данных Azure для MySQL с помощью Spring Data JDBC, выполните следующие действия, чтобы настроить приложение:
Настройте учетные данные База данных Azure для MySQL, добавив следующие свойства в файл конфигурации application.properties.
logging.level.org.springframework.jdbc.core=DEBUG spring.datasource.url=jdbc:mysql://mysqlsingletest.mysql.database.azure.com:3306/demo?serverTimezone=UTC spring.datasource.username=<your_mysql_ad_non_admin_username>@mysqlsingletest spring.datasource.azure.passwordless-enabled=true spring.sql.init.mode=always
Предупреждение
Свойство
spring.sql.init.mode=always
конфигурации означает, что Spring Boot автоматически создает схему базы данных с помощью файла schema.sql , который будет создан далее, при каждом запуске сервера. Эта функция отлично подходит для тестирования, но помните, что данные будут удалены при каждом перезапуске, поэтому его не следует использовать в рабочей среде.Свойство
spring.datasource.url
конфигурации добавлено?serverTimezone=UTC
, чтобы сообщить драйверу JDBC использовать формат даты UTC (или универсальное время координированного времени) при подключении к базе данных. Без этого параметра сервер Java не будет использовать тот же формат даты, что и база данных, что приведет к ошибке.
Создайте файл конфигурации src/main/resources/schema.sql для настройки схемы базы данных, а затем добавьте следующее содержимое.
DROP TABLE IF EXISTS todo; CREATE TABLE todo (id SERIAL PRIMARY KEY, description VARCHAR(255), details VARCHAR(4096), done BOOLEAN);
Создайте новый
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; }
Измените файл класса запуска, чтобы отобразить следующее содержимое.
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.
Запустите приложение. Приложение сохраняет данные в базе данных. Вы увидите журналы, аналогичные следующему примеру:
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 Apps
Теперь, когда у вас есть приложение Spring Boot, работающее локально, пришло время переместить его в рабочую среду. Azure Spring Apps упрощает развертывание приложений Spring Boot в Azure без каких-либо изменений кода. Эта служба управляет инфраструктурой приложений Spring, благодаря чему разработчики могут сосредоточиться на коде. Azure Spring Apps обеспечивает управление жизненным циклом за счет комплексного мониторинга и диагностики, управления конфигурацией, обнаружения служб, интеграции CI/CD, выполнения сине-зеленых развертываний и прочего. Сведения о развертывании приложения в Azure Spring Apps см. в статье "Развертывание первого приложения в Azure Spring Apps".