Поделиться через


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

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

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

В этом руководстве мы рассмотрим два метода проверки подлинности: Microsoft Entra аутентификацию и проверку подлинности PostgreSQL. На вкладке Passwordless показана проверка подлинности Microsoft Entra и вкладка Password отображается проверка подлинности PostgreSQL.

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

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

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

  • Клиент командной строки PostgreSQL.

  • Если у вас нет приложения Spring Boot, создайте проект Maven с помощью Spring Initializr. Обязательно выберите Maven Project и в разделе Dependencies, добавьте Spring Web, Spring Data JDBC и PostgreSQL Driver и выберите Java версии 8 или более поздней.

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

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

Настройка правила брандмауэра для сервера PostgreSQL

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

Чтобы использовать базу данных, откройте брандмауэр сервера, чтобы разрешить локальный IP-адрес для доступа к серверу базы данных. Дополнительные сведения см. в правилах брандмауэра в Azure Database for PostgreSQL — Гибкий сервер.

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

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

Затем создайте пользователя без администратора и предоставьте всем разрешения для базы данных.

Следующий метод можно использовать для создания неадминистративного пользователя, использующего соединение без пароля.

  1. Используйте следующую команду, чтобы установить расширение Service Connector без пароля для Azure CLI:

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

Теперь, когда у вас есть Azure Database for PostgreSQL гибкий экземпляр сервера, можно хранить данные с помощью Spring Cloud Azure.

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

  • Список компонентов (BOM) Spring Cloud для Azure

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

    Примечание.

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

    Если вы используете Spring Boot 3.5.x, обязательно задайте версию spring-cloud-azure-dependencies на 6.2.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 JDBC PostgreSQL:

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

Примечание.

С версии 4.5.0 поддерживаются подключения без пароля.

Настройка Spring Boot для использования Azure Database for PostgreSQL

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

  1. Настройте учетные данные Azure Database for 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 , который будет создан далее, при каждом запуске сервера. Эта функция отлично подходит для тестирования, но помните, что данные будут удалены при каждом перезапуске, поэтому его не следует использовать в рабочей среде.

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

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

Настройка правила брандмауэра для сервера PostgreSQL

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

Чтобы использовать базу данных, откройте брандмауэр сервера, чтобы разрешить локальный IP-адрес для доступа к серверу базы данных. Дополнительные сведения см. в разделе Создание и управление правилами брандмауэра для Azure Database for PostgreSQL - одиночный сервер с помощью портала Azure.

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

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

Затем создайте пользователя без администратора и предоставьте всем разрешения для базы данных.

Следующий метод можно использовать для создания неадминистративного пользователя, использующего соединение без пароля.

  1. Используйте следующую команду, чтобы установить расширение Service Connector без пароля для Azure CLI:

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

Теперь, когда вы настроили одиночный сервер Azure Database for PostgreSQL, вы можете хранить данные с помощью Spring Cloud Azure.

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

  • Список компонентов (BOM) Spring Cloud для Azure

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

    Примечание.

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

    Если вы используете Spring Boot 3.5.x, обязательно задайте версию spring-cloud-azure-dependencies на 6.2.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 JDBC PostgreSQL:

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

Примечание.

С версии 4.5.0 поддерживаются подключения без пароля.

Настройка Spring Boot для использования Azure Database for PostgreSQL

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

  1. Настройте учетные данные Azure Database for 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 , который будет создан далее, при каждом запуске сервера. Эта функция отлично подходит для тестирования, но помните, что данные будут удалены при каждом перезапуске, поэтому его не следует использовать в рабочей среде.

  1. Создайте файл конфигурации 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);
    
  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 Apps

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

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