Использование JDBC Spring Data с Базой данных Azure для PostgreSQL
В этом руководстве показано, как хранить данные в базе данных База данных Azure для PostgreSQL с помощью Spring Data JDBC.
JDBC — это стандартный API Java для подключения к стандартным реляционным базам данных.
В этом руководстве мы рассмотрим два метода проверки подлинности: проверку подлинности Microsoft Entra и проверку подлинности PostgreSQL. На вкладке "Без пароля" показана проверка подлинности Microsoft Entra, а на вкладке "Пароль " отображается проверка подлинности PostgreSQL.
Проверка подлинности Microsoft Entra — это механизм подключения к База данных Azure для PostgreSQL с помощью удостоверений, определенных в идентификаторе Microsoft Entra. С помощью проверки подлинности Microsoft Entra можно централизованно управлять удостоверениями пользователей базы данных и другими службами Майкрософт, что упрощает управление разрешениями.
Проверка подлинности PostgreSQL использует учетные записи, хранящиеся в PostgreSQL. Если вы решили использовать пароли в качестве учетных данных для учетных записей, эти учетные данные будут храниться в user
таблице. Так как эти пароли хранятся в PostgreSQL, вам нужно самостоятельно управлять сменой паролей.
Предварительные требования
Подписка Azure — создайте бесплатную учетную запись.
Пакет средств разработки Java (JDK) версии 8 или более поздней.
Клиент командной строки PostgreSQL.
Если у вас нет приложения Spring Boot, создайте проект Maven с помощью Spring Initializr. Обязательно выберите Проект Maven и в разделе Зависимостей добавьте зависимости Spring Web, Spring Data JDBC и PostgreSQL Driver , а затем выберите Java версии 8 или более поздней.
- Если у вас его нет, создайте экземпляр базы данных Azure для PostgreSQL гибкого сервера с именем
postgresqlflexibletest
и создайте базу данных с именемdemo
. Для получения инструкций см. Краткое руководство: Создание гибкого сервера базы данных Azure для PostgreSQL в Портале Azure.
См. пример приложения
В этом руководстве вы закодируем пример приложения. Если вы хотите ускорить работу, готовое приложение доступно здесь: https://github.com/Azure-Samples/quickstart-spring-data-jdbc-postgresql.
Настройка правила брандмауэра для сервера PostgreSQL
Экземпляры Базы данных Azure для PostgreSQL по умолчанию защищены. В них включен брандмауэр, который блокирует все входящие подключения.
Чтобы использовать базу данных, откройте брандмауэр сервера, чтобы разрешить локальный IP-адрес для доступа к серверу базы данных. Дополнительные сведения см. в разделе "Правила брандмауэра" в База данных Azure для PostgreSQL — гибкий сервер.
Если вы подключаетесь к серверу PostgreSQL из подсистема Windows для Linux (WSL) на компьютере Windows, необходимо добавить идентификатор узла WSL в брандмауэр.
Создание пользователя, отличного от администратора PostgreSQL, и предоставление разрешения
Затем создайте пользователя без администратора и предоставьте всем разрешения для базы данных.
Следующий метод можно использовать для создания неадминистративного пользователя, использующего соединение без пароля.
Используйте следующую команду, чтобы установить расширение Service Connector без пароля для Azure CLI:
az extension add --name serviceconnector-passwordless --upgrade
Используйте следующую команду, чтобы создать пользователя Microsoft Entra без прав администратора.
az connection create postgres-flexible \ --resource-group <your_resource_group_name> \ --connection postgres_conn \ --target-resource-group <your_resource_group_name> \ --server postgresqlflexibletest \ --database demo \ --user-account \ --query authInfo.userName \ --output tsv
Когда команда завершится, запишите имя пользователя в выходных данных консоли.
Хранение данных из базы данных Azure в PostgreSQL
Теперь, когда у вас есть гибкий экземпляр сервера баз данных Azure для PostgreSQL, можно хранить данные с помощью Spring Cloud Azure.
Чтобы установить модуль Azure Starter JDBC PostgreSQL Spring Cloud, добавьте следующие зависимости в файл pom.xml :
Пакет конфигураций Spring Cloud Azure (BOM):
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>5.21.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 должна использоваться".Артефакт Spring Cloud Azure Starter JDBC PostgreSQL:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-jdbc-postgresql</artifactId> </dependency>
Примечание.
Подключения без пароля поддерживаются с версии 4.5.0
.
Настройка Spring Boot для использования Базы данных Azure для PostgreSQL
Чтобы сохранить данные из База данных Azure для PostgreSQL с помощью Spring Data JDBC, выполните следующие действия, чтобы настроить приложение:
Настройте учетные данные База данных Azure для PostgreSQL, добавив следующие свойства в файл конфигурации application.properties.
logging.level.org.springframework.jdbc.core=DEBUG spring.datasource.url=jdbc:postgresql://postgresqlflexibletest.postgres.database.azure.com:5432/demo?sslmode=require spring.datasource.username=<your_postgresql_ad_non_admin_username> spring.datasource.azure.passwordless-enabled=true spring.sql.init.mode=always
Предупреждение
Свойство
spring.sql.init.mode=always
конфигурации означает, что Spring Boot автоматически создает схему базы данных с помощью файла schema.sql , который будет создан далее, при каждом запуске сервера. Эта функция отлично подходит для тестирования, но помните, что данные будут удалены при каждом перезапуске, поэтому его не следует использовать в рабочей среде.
- Если у вас его нет, создайте экземпляр Azure Database для PostgreSQL одиночного сервера с именем
postgresqlsingletest
и базу данных с именемdemo
. Для получения инструкций см. краткое руководство: Создание сервера базы данных Azure для PostgreSQL с использованием портала Azure.
См. пример приложения
В этой статье вы закодируем пример приложения. Если вы хотите ускорить работу, готовое приложение доступно здесь: https://github.com/Azure-Samples/quickstart-spring-data-jdbc-postgresql.
Настройка правила брандмауэра для сервера PostgreSQL
Экземпляры Базы данных Azure для PostgreSQL по умолчанию защищены. В них включен брандмауэр, который блокирует все входящие подключения.
Чтобы использовать базу данных, откройте брандмауэр сервера, чтобы разрешить локальный IP-адрес для доступа к серверу базы данных. Дополнительные сведения см. в статье "Создание правил брандмауэра и управление ими" для отдельного сервера базы данных Azure для PostgreSQL с помощью портала Azure.
Если вы подключаетесь к серверу PostgreSQL из подсистема Windows для Linux (WSL) на компьютере Windows, необходимо добавить идентификатор узла WSL в брандмауэр.
Создание пользователя, отличного от администратора PostgreSQL, и предоставление разрешения
Затем создайте пользователя без администратора и предоставьте всем разрешения для базы данных.
Вы можете использовать следующий метод для создания неадминистраторского пользователя, который использует подключение без пароля.
Используйте следующую команду, чтобы установить расширение Service Connector без пароля для Azure CLI:
az extension add --name serviceconnector-passwordless --upgrade
Используйте следующую команду, чтобы создать неадминистраторского пользователя Microsoft Entra.
az connection create postgres \ --resource-group <your_resource_group_name> \ --connection postgres_conn \ --target-resource-group <your_resource_group_name> \ --server postgresqlsingletest \ --database demo \ --user-account \ --query authInfo.userName \ --output tsv
Когда команда завершится, запишите имя пользователя в выходных данных консоли.
Храните данные из базы данных Azure для PostgreSQL
Теперь, когда у вас есть экземпляр односерверной базы данных Azure для PostgreSQL, можно хранить данные с помощью Spring Cloud Azure.
Чтобы установить модуль Azure Starter JDBC PostgreSQL Spring Cloud, добавьте следующие зависимости в файл pom.xml :
Билль о материалах Spring Cloud Azure (BOM):
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>5.21.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 файла. Это гарантирует, что все зависимости Spring Cloud Azure используют одну и ту же версию. Дополнительные сведения о версии, используемой для этого BOM, см. в статье "Какая версия Spring Cloud Azure должна использоваться".Артефакт JDBC PostgreSQL для Spring Cloud Azure Starter:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-jdbc-postgresql</artifactId> </dependency>
Примечание.
Начиная с версии 4.5.0
, поддерживаются беспарольные подключения.
Настройка Spring Boot для использования Базы данных Azure для PostgreSQL
Чтобы сохранить данные из База данных Azure для PostgreSQL с помощью Spring Data JDBC, выполните следующие действия, чтобы настроить приложение:
Настройте учетные данные База данных Azure для PostgreSQL, добавив следующие свойства в файл конфигурации application.properties.
logging.level.org.springframework.jdbc.core=DEBUG spring.datasource.url=jdbc:postgresql://postgresqlsingletest.postgres.database.azure.com:5432/demo?sslmode=require spring.datasource.username=<your_postgresql_ad_non_admin_username>@postgresqlsingletest spring.datasource.azure.passwordless-enabled=true spring.sql.init.mode=always
Предупреждение
Свойство
spring.sql.init.mode=always
конфигурации означает, что Spring Boot автоматически создает схему базы данных с помощью файла schema.sql , который будет создан далее, при каждом запуске сервера. Эта функция отлично подходит для тестирования, но помните, что данные будут удалены при каждом перезапуске, поэтому его не следует использовать в рабочей среде.
Создайте файл конфигурации 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 Identity, чтобы упростить получение учетных данных без каких-либо изменений кода.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".