Delen via


Spring Data JPA gebruiken met Azure Database for PostgreSQL

In deze zelfstudie ziet u hoe u gegevens opslaat in Azure Database for PostgreSQL met behulp van Spring Data JPA.

De Java Persistence-API (JPA) is de standaard Java-API voor object-relationele toewijzing.

In deze zelfstudie bevatten we twee verificatiemethoden: Microsoft Entra-verificatie en PostgreSQL-verificatie. Op het tabblad Wachtwoordloos wordt de Microsoft Entra-verificatie weergegeven en op het tabblad Wachtwoord wordt de PostgreSQL-verificatie weergegeven.

Microsoft Entra-verificatie is een mechanisme voor het maken van verbinding met Azure Database for PostgreSQL met behulp van identiteiten die zijn gedefinieerd in Microsoft Entra-id. Met Microsoft Entra-verificatie kunt u databasegebruikersidentiteiten en andere Microsoft-services op een centrale locatie beheren, waardoor het beheer van machtigingen wordt vereenvoudigd.

PostgreSQL-verificatie maakt gebruik van accounts die zijn opgeslagen in PostgreSQL. Als u ervoor kiest om wachtwoorden als referenties voor de accounts te gebruiken, worden deze referenties opgeslagen in de user tabel. Omdat deze wachtwoorden zijn opgeslagen in PostgreSQL, moet u de rotatie van de wachtwoorden zelf beheren.

Vereisten

  • PostgreSQL-opdrachtregelclient.

  • Als u geen Spring Boot-toepassing hebt, maakt u een Maven-project met de Spring Initializr. Zorg ervoor dat u Maven-project selecteert en onder Afhankelijkheden de afhankelijkheden van Spring Web, Spring Data JDBC en PostgreSQL-stuurprogramma's toevoegt en vervolgens Java-versie 8 of hoger selecteert.

Belangrijk

Als u wachtwoordloze verbindingen wilt gebruiken, configureert u de Microsoft Entra-beheerdergebruiker voor uw exemplaar van Azure Database for PostgreSQL Flexible Server. Zie Microsoft Entra-rollen beheren in Azure Database for PostgreSQL - Flexible Server voor meer informatie.

Bekijk de voorbeeldtoepassing

In deze zelfstudie codeert u een voorbeeldtoepassing. Als u sneller wilt gaan, is deze toepassing al gecodeerd en beschikbaar op https://github.com/Azure-Samples/quickstart-spring-data-jpa-postgresql.

Een firewallregel voor uw PostgreSQL-server configureren

Azure Database for PostgreSQL-instanties worden standaard beveiligd. Ze hebben een firewall die geen enkele binnenkomende verbinding toestaat.

Als u de database wilt kunnen gebruiken, opent u de firewall van de server om het lokale IP-adres toegang te geven tot de databaseserver. Zie Firewallregels in Azure Database for PostgreSQL - Flexible Server voor meer informatie.

Als u verbinding maakt met uw PostgreSQL-server vanaf Windows-subsysteem voor Linux (WSL) op een Windows-computer, moet u de WSL-host-id toevoegen aan uw firewall.

Een postgreSQL-gebruiker zonder beheerdersrechten maken en toestemming verlenen

Maak vervolgens een niet-beheerder en verdeel alle machtigingen aan de database.

U kunt de volgende methode gebruiken om een niet-beheerder te maken die gebruikmaakt van een verbinding zonder wachtwoord.

  1. Gebruik de volgende opdracht om de serviceconnector-extensie zonder wachtwoord te installeren voor de Azure CLI:

     az extension add --name serviceconnector-passwordless --upgrade
    
  2. Gebruik de volgende opdracht om de niet-beheerdersgebruiker van Microsoft Entra te maken:

      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
    

    Wanneer de opdracht is voltooid, noteert u de gebruikersnaam in de console-uitvoer.

Gegevens opslaan uit Azure Database for PostgreSQL

Nu u een Azure Database for PostgreSQL Flexible Server-exemplaar hebt, kunt u gegevens opslaan met behulp van Spring Cloud Azure.

Als u de Spring Cloud Azure Starter JDBC PostgreSQL-module wilt installeren, voegt u de volgende afhankelijkheden toe aan uw pom.xml-bestand :

  • De Spring Cloud Azure Bill of Materials (BOM):

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

    Notitie

    Als u Spring Boot 2.x gebruikt, moet u de spring-cloud-azure-dependencies versie instellen op 4.19.0. Deze stuklijst (Bill of Material) moet worden geconfigureerd in de <dependencyManagement> sectie van uw pom.xml-bestand . Dit zorgt ervoor dat alle Spring Cloud Azure-afhankelijkheden dezelfde versie gebruiken. Zie welke versie van Spring Cloud Azure moet ik gebruiken voor meer informatie over de versie die voor deze BOM wordt gebruikt.

  • Het Spring Cloud Azure Starter JDBC PostgreSQL-artefact:

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

Notitie

Verbindingen zonder wachtwoord worden ondersteund sinds versie 4.5.0.

Spring Boot configureren voor het gebruik van Azure Database for PostgreSQL

Als u gegevens uit Azure Database for PostgreSQL wilt opslaan met spring Data JPA, voert u de volgende stappen uit om de toepassing te configureren:

  1. Configureer Azure Database for PostgreSQL-referenties door de volgende eigenschappen toe te voegen aan het configuratiebestand application.properties .

    logging.level.org.hibernate.SQL=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.jpa.hibernate.ddl-auto=create-drop
    spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
    

Belangrijk

Als u wachtwoordloze verbindingen wilt gebruiken, configureert u de Microsoft Entra-beheerdergebruiker voor uw exemplaar van Azure Database for PostgreSQL Single Server. Zie Microsoft Entra-id gebruiken voor verificatie met PostgreSQL voor meer informatie.

Bekijk de voorbeeldtoepassing

In dit artikel codet u een voorbeeldtoepassing. Als u sneller wilt gaan, is deze toepassing al gecodeerd en beschikbaar op https://github.com/Azure-Samples/quickstart-spring-data-jpa-postgresql.

Een firewallregel voor uw PostgreSQL-server configureren

Azure Database for PostgreSQL-instanties worden standaard beveiligd. Ze hebben een firewall die geen enkele binnenkomende verbinding toestaat.

Als u de database wilt kunnen gebruiken, opent u de firewall van de server om het lokale IP-adres toegang te geven tot de databaseserver. Zie Firewallregels maken en beheren voor Azure Database for PostgreSQL - Enkele server met behulp van Azure Portal voor meer informatie.

Als u verbinding maakt met uw PostgreSQL-server vanaf Windows-subsysteem voor Linux (WSL) op een Windows-computer, moet u de WSL-host-id toevoegen aan uw firewall.

Een postgreSQL-gebruiker zonder beheerdersrechten maken en toestemming verlenen

Maak vervolgens een niet-beheerder en verdeel alle machtigingen aan de database.

U kunt de volgende methode gebruiken om een niet-beheerder te maken die gebruikmaakt van een verbinding zonder wachtwoord.

  1. Gebruik de volgende opdracht om de serviceconnector-extensie zonder wachtwoord te installeren voor de Azure CLI:

     az extension add --name serviceconnector-passwordless --upgrade
    
  2. Gebruik de volgende opdracht om de niet-beheerdersgebruiker van Microsoft Entra te maken:

      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
    

    Wanneer de opdracht is voltooid, noteert u de gebruikersnaam in de console-uitvoer.

Gegevens opslaan uit Azure Database for PostgreSQL

Nu u een exemplaar van Azure Database for PostgreSQL Enkele server hebt, kunt u gegevens opslaan met behulp van Spring Cloud Azure.

Als u de Spring Cloud Azure Starter JDBC PostgreSQL-module wilt installeren, voegt u de volgende afhankelijkheden toe aan uw pom.xml-bestand :

  • De Spring Cloud Azure Bill of Materials (BOM):

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

    Notitie

    Als u Spring Boot 2.x gebruikt, moet u de spring-cloud-azure-dependencies versie instellen op 4.19.0. Deze stuklijst (Bill of Material) moet worden geconfigureerd in de <dependencyManagement> sectie van uw pom.xml-bestand . Dit zorgt ervoor dat alle Spring Cloud Azure-afhankelijkheden dezelfde versie gebruiken. Zie welke versie van Spring Cloud Azure moet ik gebruiken voor meer informatie over de versie die voor deze BOM wordt gebruikt.

  • Het Spring Cloud Azure Starter JDBC PostgreSQL-artefact:

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

Notitie

Verbindingen zonder wachtwoord worden ondersteund sinds versie 4.5.0.

Spring Boot configureren voor het gebruik van Azure Database for PostgreSQL

Als u gegevens uit Azure Database for PostgreSQL wilt opslaan met spring Data JPA, voert u de volgende stappen uit om de toepassing te configureren:

  1. Configureer Azure Database for PostgreSQL-referenties door de volgende eigenschappen toe te voegen aan het configuratiebestand application.properties .

    logging.level.org.hibernate.SQL=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.jpa.hibernate.ddl-auto=create-drop
    spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
    
  1. Maak een nieuwe Todo Java-klasse. Deze klasse is een domeinmodel dat is toegewezen aan de todo tabel die automatisch wordt gemaakt door JPA. De volgende code negeert de getters en setters methoden.

    package com.example.demo;
    
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    
    @Entity
    public class Todo {
    
        public Todo() {
        }
    
        public Todo(String description, String details, boolean done) {
            this.description = description;
            this.details = details;
            this.done = done;
        }
    
        @Id
        @GeneratedValue
        private Long id;
    
        private String description;
    
        private String details;
    
        private boolean done;
    
    }
    
  2. Bewerk het opstartklassebestand om de volgende inhoud weer te geven.

    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.jpa.repository.JpaRepository;
    
    import java.util.stream.Collectors;
    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)).collect(Collectors.toList()))
                .forEach(System.out::println);
        }
    
    }
    
    interface TodoRepository extends JpaRepository<Todo, Long> {
    
    }
    

    Tip

    In deze zelfstudie zijn er geen verificatiebewerkingen in de configuraties of de code. Voor het maken van verbinding met Azure-services is echter verificatie vereist. Als u de verificatie wilt voltooien, moet u Azure Identity gebruiken. Spring Cloud Azure maakt gebruik DefaultAzureCredentialvan, die de Azure Identity-bibliotheek biedt om u te helpen referenties op te halen zonder dat er codewijzigingen zijn aangebracht.

    DefaultAzureCredential ondersteunt meerdere verificatiemethoden en bepaalt welke methode tijdens runtime moet worden gebruikt. Met deze aanpak kan uw app verschillende verificatiemethoden gebruiken in verschillende omgevingen (zoals lokale en productieomgevingen) zonder omgevingsspecifieke code te implementeren. Zie DefaultAzureCredential voor meer informatie.

    Als u de verificatie in lokale ontwikkelomgevingen wilt voltooien, kunt u Azure CLI, Visual Studio Code, PowerShell of andere methoden gebruiken. Zie Azure-verificatie in Java-ontwikkelomgevingen voor meer informatie. Als u de verificatie in Azure-hostingomgevingen wilt voltooien, raden we u aan om een door de gebruiker toegewezen beheerde identiteit te gebruiken. Zie Wat zijn beheerde identiteiten voor Azure-resources? voor meer informatie.

  3. Start de toepassing. U ziet logboeken die vergelijkbaar zijn met het volgende voorbeeld:

    2023-02-01 10:29:19.763 DEBUG 4392 --- [main] org.hibernate.SQL : insert into todo (description, details, done, id) values (?, ?, ?, ?)
    com.example.demo.Todo@1f
    

Implementeren in Azure Spring Apps

Nu de Spring Boot-toepassing lokaal wordt uitgevoerd, is het tijd om deze naar productie te verplaatsen. Met Azure Spring Apps kunt u Eenvoudig Spring Boot-toepassingen implementeren in Azure zonder codewijzigingen. De service beheert de infrastructuur van Spring-toepassingen, zodat ontwikkelaars zich kunnen richten op hun code. Azure Spring Apps biedt levenscyclusbeheer met uitgebreide bewaking en diagnose, configuratiebeheer, servicedetectie, CI/CD-integratie, blauwgroene implementaties en meer. Zie Uw eerste toepassing implementeren in Azure Spring Apps om uw toepassing te implementeren in Azure Spring Apps.

Volgende stappen