Dela via


Använda Spring Data JPA med Azure Database for PostgreSQL

Den här självstudien visar hur du lagrar data i Azure Database for PostgreSQL med Spring Data JPA.

Java Persistence API (JPA) är java-standard-API:et för objektrelationsmappning.

I den här självstudien innehåller vi två autentiseringsmetoder: Microsoft Entra-autentisering och PostgreSQL-autentisering. Fliken Lösenordslös visar Microsoft Entra-autentiseringen och fliken Lösenord visar PostgreSQL-autentisering.

Microsoft Entra-autentisering är en mekanism för att ansluta till Azure Database for PostgreSQL med hjälp av identiteter som definierats i Microsoft Entra-ID. Med Microsoft Entra-autentisering kan du hantera databasanvändares identiteter och andra Microsoft-tjänster på en central plats, vilket förenklar behörighetshanteringen.

PostgreSQL-autentisering använder konton som lagras i PostgreSQL. Om du väljer att använda lösenord som autentiseringsuppgifter för kontona lagras dessa autentiseringsuppgifter i user tabellen. Eftersom dessa lösenord lagras i PostgreSQL måste du hantera rotationen av lösenorden själv.

Förutsättningar

  • PostgreSQL-kommandoradsklient.

  • Om du inte har något Spring Boot-program skapar du ett Maven-projekt med Spring Initializr. Se till att välja Maven Project och under Beroenden lägger du till Beroenden för Spring Web, Spring Data JDBC och PostgreSQL Driver och väljer sedan Java version 8 eller senare.

Viktigt!

Om du vill använda lösenordslösa anslutningar konfigurerar du Microsoft Entra-administratörsanvändaren för din Azure Database for PostgreSQL – flexibel serverinstans. Mer information finns i Hantera Microsoft Entra-roller i Azure Database for PostgreSQL – flexibel server.

Se exempelprogrammet

I den här självstudien kodar du ett exempelprogram. Om du vill gå snabbare är det här programmet redan kodat och tillgängligt på https://github.com/Azure-Samples/quickstart-spring-data-jpa-postgresql.

Konfigurera en brandväggsregel för PostgreSQL-servern

Azure Database for PostgreSQL-instanser skyddas som standard. Databaserna har en brandvägg som inte tillåter inkommande anslutningar.

Om du vill kunna använda databasen öppnar du serverns brandvägg så att den lokala IP-adressen kan komma åt databasservern. Mer information finns i Brandväggsregler i Azure Database for PostgreSQL – flexibel server.

Om du ansluter till PostgreSQL-servern från Windows-undersystem för Linux (WSL) på en Windows-dator måste du lägga till WSL-värd-ID:t i brandväggen.

Skapa en PostgreSQL-användare som inte är administratör och bevilja behörighet

Skapa sedan en icke-administratörsanvändare och bevilja alla behörigheter till databasen.

Du kan använda följande metod för att skapa en icke-administratörsanvändare som använder en lösenordslös anslutning.

  1. Använd följande kommando för att installera det lösenordslösa tillägget för Service Connector för Azure CLI:

     az extension add --name serviceconnector-passwordless --upgrade
    
  2. Använd följande kommando för att skapa microsoft Entra-användaren som inte är administratör:

      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
    

    När kommandot har slutförts noterar du användarnamnet i konsolens utdata.

Lagra data från Azure Database for PostgreSQL

Nu när du har en Azure Database for PostgreSQL – flexibel serverinstans kan du lagra data med hjälp av Spring Cloud Azure.

Om du vill installera Spring Cloud Azure Starter JDBC PostgreSQL-modulen lägger du till följande beroenden i din pom.xml-fil :

  • 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>
    

    Kommentar

    Om du använder Spring Boot 2.x måste du ange spring-cloud-azure-dependencies versionen till 4.19.0. Den här strukturlistan (BOM) bör konfigureras i avsnittet i <dependencyManagement> din pom.xml-fil . Detta säkerställer att alla Spring Cloud Azure-beroenden använder samma version. Mer information om vilken version som används för den här strukturlistan finns i Vilken version av Spring Cloud Azure ska jag använda.

  • Spring Cloud Azure Starter JDBC PostgreSQL-artefakten:

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

Kommentar

Lösenordslösa anslutningar har stöd för sedan version 4.5.0.

Konfigurera Spring Boot för att använda Azure Database for PostgreSQL

Följ dessa steg för att konfigurera programmet för att lagra data från Azure Database for PostgreSQL med Spring Data JPA:

  1. Konfigurera autentiseringsuppgifter för Azure Database for PostgreSQL genom att lägga till följande egenskaper i konfigurationsfilen 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
    

Viktigt!

Om du vill använda lösenordslösa anslutningar konfigurerar du Microsoft Entra-administratörsanvändaren för din Azure Database for PostgreSQL-instans med en enskild server. Mer information finns i Använda Microsoft Entra-ID för autentisering med PostgreSQL.

Se exempelprogrammet

I den här artikeln kodar du ett exempelprogram. Om du vill gå snabbare är det här programmet redan kodat och tillgängligt på https://github.com/Azure-Samples/quickstart-spring-data-jpa-postgresql.

Konfigurera en brandväggsregel för PostgreSQL-servern

Azure Database for PostgreSQL-instanser skyddas som standard. Databaserna har en brandvägg som inte tillåter inkommande anslutningar.

Om du vill kunna använda databasen öppnar du serverns brandvägg så att den lokala IP-adressen kan komma åt databasservern. Mer information finns i Skapa och hantera brandväggsregler för Azure Database for PostgreSQL – enskild server med hjälp av Azure Portal.

Om du ansluter till PostgreSQL-servern från Windows-undersystem för Linux (WSL) på en Windows-dator måste du lägga till WSL-värd-ID:t i brandväggen.

Skapa en PostgreSQL-användare som inte är administratör och bevilja behörighet

Skapa sedan en icke-administratörsanvändare och bevilja alla behörigheter till databasen.

Du kan använda följande metod för att skapa en icke-administratörsanvändare som använder en lösenordslös anslutning.

  1. Använd följande kommando för att installera det lösenordslösa tillägget för Service Connector för Azure CLI:

     az extension add --name serviceconnector-passwordless --upgrade
    
  2. Använd följande kommando för att skapa microsoft Entra-användaren som inte är administratör:

      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
    

    När kommandot har slutförts noterar du användarnamnet i konsolens utdata.

Lagra data från Azure Database for PostgreSQL

Nu när du har en Instans av Azure Database for PostgreSQL – enskild server kan du lagra data med hjälp av Spring Cloud Azure.

Om du vill installera Spring Cloud Azure Starter JDBC PostgreSQL-modulen lägger du till följande beroenden i din pom.xml-fil :

  • 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>
    

    Kommentar

    Om du använder Spring Boot 2.x måste du ange spring-cloud-azure-dependencies versionen till 4.19.0. Den här strukturlistan (BOM) bör konfigureras i avsnittet i <dependencyManagement> din pom.xml-fil . Detta säkerställer att alla Spring Cloud Azure-beroenden använder samma version. Mer information om vilken version som används för den här strukturlistan finns i Vilken version av Spring Cloud Azure ska jag använda.

  • Spring Cloud Azure Starter JDBC PostgreSQL-artefakten:

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

Kommentar

Lösenordslösa anslutningar har stöd för sedan version 4.5.0.

Konfigurera Spring Boot för att använda Azure Database for PostgreSQL

Följ dessa steg för att konfigurera programmet för att lagra data från Azure Database for PostgreSQL med Spring Data JPA:

  1. Konfigurera autentiseringsuppgifter för Azure Database for PostgreSQL genom att lägga till följande egenskaper i konfigurationsfilen 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. Skapa en ny Todo Java-klass. Den här klassen är en domänmodell som mappas till tabellen todo som skapas automatiskt av JPA. Följande kod ignorerar getters metoderna och setters .

    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. Redigera startklassfilen för att visa följande innehåll.

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

    Dricks

    I den här självstudien finns det inga autentiseringsåtgärder i konfigurationerna eller koden. Att ansluta till Azure-tjänster kräver dock autentisering. För att slutföra autentiseringen måste du använda Azure Identity. Spring Cloud Azure använder DefaultAzureCredential, som Azure Identity-biblioteket tillhandahåller för att hjälpa dig att få autentiseringsuppgifter utan några kodändringar.

    DefaultAzureCredential stöder flera autentiseringsmetoder och avgör vilken metod som ska användas vid körning. Med den här metoden kan din app använda olika autentiseringsmetoder i olika miljöer (till exempel lokala miljöer och produktionsmiljöer) utan att implementera miljöspecifik kod. Mer information finns i DefaultAzureCredential.

    För att slutföra autentiseringen i lokala utvecklingsmiljöer kan du använda Azure CLI, Visual Studio Code, PowerShell eller andra metoder. Mer information finns i Azure-autentisering i Java-utvecklingsmiljöer. För att slutföra autentiseringen i Azure-värdmiljöer rekommenderar vi att du använder användartilldelad hanterad identitet. Mer information finns i Vad är hanterade identiteter för Azure-resurser?

  3. Starta programmet. Du ser loggar som liknar följande exempel:

    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
    

Distribuera till Azure Spring Apps

Nu när Spring Boot-programmet körs lokalt är det dags att flytta det till produktion. Azure Spring Apps gör det enkelt att distribuera Spring Boot-program till Azure utan några kodändringar. Tjänsten hanterar infrastrukturen för Spring-program så att utvecklare kan fokusera på sin kod. Azure Spring Apps tillhandahåller livscykelhantering med omfattande övervakning och diagnostik, konfigurationshantering, tjänstidentifiering, CI/CD-integrering, blågröna distributioner med mera. Information om hur du distribuerar ditt program till Azure Spring Apps finns i Distribuera ditt första program till Azure Spring Apps.

Nästa steg