Dela via


Använda Spring Data JDBC med Azure SQL Database

Den här självstudien visar hur du lagrar data i Azure SQL Database med hjälp av Spring Data JDBC.

JDBC är standard-JAVA API för att ansluta till traditionella relationsdatabaser.

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

Microsoft Entra autentisering är en mekanism för att ansluta till Azure Database for SQL Database 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.

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

Förutsättningar

  • sqlcmd-verktyg.

  • ODBC-drivrutin 17 eller 18.

  • Om du inte har någon skapar du en Azure SQL Server-instans med namnet sqlservertest och en databas med namnet demo. Anvisningar finns i Quickstart: Skapa en enkel databas – Azure SQL Database.

  • 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 Dependencies, lägg till Spring Web, Spring Data JDBC och MS SQL Server Driver beroenden och välj sedan Java version 8 eller senare.

Se exempelprogrammet

I den här handledningen kommer du att programmera en exempelapplikation. Om du vill gå snabbare är det här programmet redan kodat och tillgängligt på https://github.com/Azure-Samples/quickstart-spring-data-jdbc-sql-server.

Konfigurera en brandväggsregel för din Azure SQL Database-server

Azure SQL Database instanser skyddas som standard. De har en brandvägg som inte tillåter några 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 Tutorial: Skydda en databas i Azure SQL Database.

Om du ansluter till Azure SQL Database-servern från Windows Subsystem for Linux (WSL) på en Windows dator måste du lägga till WSL-värd-ID:t i brandväggen.

Skapa en SQL-databsanvändare som inte är administratör och bevilja användaren behörighet

Det här steget skapar en icke-administratörsanvändare och beviljar alla behörigheter för databasen till den demo .

Information om hur du använder lösenordslösa anslutningar finns i Tutorial: Skydda en databas i Azure SQL Database eller använd Service Connector för att skapa en Microsoft Entra administratörsanvändare för din Azure SQL Database server, enligt följande steg:

  1. Installera först Service Connector lösenordslöst tillägg för Azure CLI:

    az extension add --name serviceconnector-passwordless --upgrade
    
  2. Använd sedan följande kommando för att skapa Microsoft Entra icke-administratörsanvändare:

    az connection create sql \
        --resource-group <your-resource-group-name> \
        --connection sql_conn \
        --target-resource-group <your-resource-group-name> \
        --server sqlservertest \
        --database demo \
        --user-account \
        --query authInfo.userName \
        --output tsv
    

Den Microsoft Entra administratör som du skapade är en SQL-databasadministratörsanvändare, så du behöver inte skapa en ny användare.

Viktigt!

Azure SQL-databasens lösenordsfria anslutningar kräver en uppgradering av MS SQL Server Driver till version 12.1.0 eller senare. Anslutningsalternativet är authentication=DefaultAzureCredential i version 12.1.0 och authentication=ActiveDirectoryDefault version 12.2.0.

Lagra data från Azure SQL Database

Med en Azure SQL Database instans kan du lagra data med hjälp av Spring Cloud Azure.

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

  • Spring Cloud Azure materialförteckning (BOM):

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

    Kommentar

    Om du använder Spring Boot 4.0.x måste du ange spring-cloud-azure-dependencies versionen till 7.1.0.

    Om du använder Spring Boot 3.5.x måste du ange spring-cloud-azure-dependencies versionen till 6.1.0.

    Om du använder Spring Boot 3.1.x-3.5.x måste du ange spring-cloud-azure-dependencies versionen till 5.25.0.

    Om du använder Spring Boot 2.x måste du ange spring-cloud-azure-dependencies versionen till 4.20.0.

    Den här materialspecifikationen (BOM) bör konfigureras i avsnittet <dependencyManagement> i 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 denna BOM finns i dokumentationen Which Version of Spring Cloud Azure Should I Use.

  • Spring Cloud Azure Starter-artefaktet:

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

    Kommentar

    Eftersom det här är ett beroende bör det läggas till i <dependencies> avsnittet i pom.xml. Dens version är inte konfigurerad här eftersom den hanteras av den BOM som vi lade till tidigare.

Konfigurera Spring Boot att använda Azure SQL Database

Följ dessa steg för att konfigurera programmet om du vill lagra data från Azure SQL Database med Spring Data JDBC:

  1. Konfigurera en Azure SQL Database autentiseringsuppgifter i konfigurationsfilen application.properties.

    logging.level.org.springframework.jdbc.core=DEBUG
    
    spring.datasource.url=jdbc:sqlserver://sqlservertest.database.windows.net:1433;databaseName=demo;authentication=DefaultAzureCredential;
    
    spring.sql.init.mode=always
    

    Varning

    Konfigurationsegenskapen spring.sql.init.mode=always innebär att Spring Boot automatiskt genererar ett databasschema med hjälp av den schema.sql fil som du skapar nästa gång servern startas. Detta är bra för testning, men kom ihåg att detta tar bort dina data vid varje omstart, så du bör inte använda dem i produktion.

  1. Skapa konfigurationsfilen src/main/resources/schema.sql för att konfigurera databasschemat och lägg sedan till följande innehåll.

    DROP TABLE IF EXISTS todo;
    CREATE TABLE todo (id INT IDENTITY PRIMARY KEY, description VARCHAR(255), details VARCHAR(4096), done BIT);
    
  1. Skapa en ny klass Todo Java. Den här klassen är en domänmodell som mappas till tabellen todo som skapas automatiskt av Spring Boot. Följande kod ignorerar getters metoderna och 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. 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.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> {
    
    }
    

    Tips

    I den här handledningen finns det inga autentiseringsåtgärder i konfigurationer eller koden. Anslutning till Azure tjänster kräver dock autentisering. För att slutföra autentiseringen måste du använda Azure identitet. 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. Programmet lagrar data i databasen. Du ser loggar som liknar följande exempel:

    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
    

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