Использование 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 (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 должна использоваться".Артефакт 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 для 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 (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 должна использоваться".Артефакт 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://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, чтобы получить учетные данные без каких-либо изменений кода.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".