Spring Data JDBC gebruiken met Azure Database for PostgreSQL

In deze zelfstudie wordt gedemonstreerd hoe u gegevens opslaat in een Azure Database for PostgreSQL-database met behulp van Spring Data JDBC.

JDBC is de standaard Java-API om verbinding te maken met traditionele relationele databases.

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.

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-jdbc-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 service-Verbinding maken of de 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.11.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.17.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 JDBC, 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.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
    

    Waarschuwing

    De configuratie-eigenschap spring.sql.init.mode=always betekent dat Spring Boot automatisch een databaseschema genereert met behulp van het schema.sql-bestand dat u vervolgens maakt, telkens wanneer de server wordt gestart. Deze functie is ideaal voor testen, maar vergeet niet dat uw gegevens bij elke herstart worden verwijderd, dus u moet deze niet gebruiken in productie.

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-jdbc-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 service-Verbinding maken of de 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.11.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.17.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 JDBC, 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.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
    

    Waarschuwing

    De configuratie-eigenschap spring.sql.init.mode=always betekent dat Spring Boot automatisch een databaseschema genereert met behulp van het schema.sql-bestand dat u vervolgens maakt, telkens wanneer de server wordt gestart. Deze functie is ideaal voor testen, maar vergeet niet dat uw gegevens bij elke herstart worden verwijderd, dus u moet deze niet gebruiken in productie.

  1. Maak het configuratiebestand src/main/resources/schema.sql om het databaseschema te configureren en voeg vervolgens de volgende inhoud toe.

    DROP TABLE IF EXISTS todo;
    CREATE TABLE todo (id SERIAL PRIMARY KEY, description VARCHAR(255), details VARCHAR(4096), done BOOLEAN);
    
  1. Maak een nieuwe Todo Java-klasse. Deze klasse is een domeinmodel dat is toegewezen aan de todo tabel die automatisch wordt gemaakt door Spring Boot. De volgende code negeert de getters en setters methoden.

    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. 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.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> {
    
    }
    

    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. De toepassing slaat gegevens op in de database. U ziet logboeken die vergelijkbaar zijn met het volgende voorbeeld:

    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
    

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