Azure SQL Veritabanı ile Spring Data JDBC kullanma

Bu öğreticide, Spring Data JDBC kullanılarak verilerin Azure SQL Veritabanı içinde nasıl depolanacakları gösterilmektedir.

JDBC geleneksel ilişkisel veritabanlarına bağlanmak için standart Java API'dir.

Bu öğreticide iki kimlik doğrulama yöntemi ekleyeceğiz: Microsoft Entra kimlik doğrulaması ve SQL Veritabanı kimlik doğrulaması. Parolasız sekmesi Microsoft Entra kimlik doğrulamasını, Parola sekmesi ise SQL Veritabanı kimlik doğrulamasını gösterir.

Microsoft Entra kimlik doğrulaması, Microsoft Entra ID'de tanımlanan kimlikleri kullanarak SQL Veritabanı için Azure Veritabanına bağlanmaya yönelik bir mekanizmadır. Microsoft Entra kimlik doğrulaması kullanarak, veritabanı kullanıcı kimliklerini ve diğer Microsoft hizmetleri merkezi bir konumda yönetebilirsiniz ve bu da izin yönetimini basitleştirir.

SQL Veritabanı kimlik doğrulaması, SQL Veritabanı depolanan hesapları kullanır. Hesapların kimlik bilgileri olarak parolaları kullanmayı seçerseniz, bu kimlik bilgilerini kullanıcı tablosunda depolarsınız. Bu parolalar SQL Veritabanı'nda depolandığından, parolaların dönüşünü yönetmeniz gerekir.

Önkoşullar

  • sqlcmd Yardımcı Programı.

  • ODBC Sürücüsü 17 veya 18.

  • Eğer bir Azure SQL Server örneğiniz yoksa, sqlservertest adlı bir Azure SQL Server örneği ve demo adlı bir veritabanı oluşturun. Yönergeler için bkz. Quickstart: Tek veritabanı oluşturma - Azure SQL Veritabanı.

  • Spring Boot uygulamanız yoksa Spring Initializr ile bir Maven projesi oluşturun. Maven Project'i seçtiğinizden emin olun ve Bağımlılıklar'ın altında Spring Web, Spring Data JDBC ve MS SQL Server Driver bağımlılıklarını ekleyin. Ardından Java sürüm 8 veya üzerini seçin.

Örnek uygulamaya bakın

Bu öğreticide örnek bir uygulamayı kodlaacaksınız. Daha hızlı gitmek istiyorsanız, bu uygulama zaten kodlanmış ve https://github.com/Azure-Samples/quickstart-spring-data-jdbc-sql-server konumunda kullanılabilir.

Azure SQL Veritabanı sunucunuz için güvenlik duvarı kuralı yapılandırma

Azure SQL Veritabanı örnekleri varsayılan olarak güvenlidir. Gelen bağlantılara izin vermeyen bir güvenlik duvarı vardır.

Veritabanınızı kullanabilmek için sunucunun güvenlik duvarını açarak yerel IP adresinin veritabanı sunucusuna erişmesine izin verin. Daha fazla bilgi için bkz. Tutorial: Azure SQL Veritabanı'da veritabanının güvenliğini sağlama.

Windows bir bilgisayarda Linux için Windows Alt Sistemi 'den (WSL) Azure SQL Veritabanı sunucunuza bağlanıyorsanız, WSL ana bilgisayar kimliğini güvenlik duvarınıza eklemeniz gerekir.

Sql veritabanı yönetici olmayan kullanıcı oluşturma ve izin verme

Bu adım yönetici olmayan bir kullanıcı oluşturur ve veritabanındaki demo tüm izinleri ona verir.

Parolasız bağlantıları kullanmak için bkz. Tutorial: Azure SQL Veritabanı veya Azure SQL Veritabanı sunucunuz için Microsoft Entra yönetici kullanıcı oluşturmak üzere Service Connector'ı kullanın. Aşağıdaki adımlarda gösterildiği gibi:

  1. İlk olarak, Azure CLI için Service Connector parolasız uzantıyı yükleyin:

    az extension add --name serviceconnector-passwordless --upgrade
    
  2. Ardından, yönetici olmayan Microsoft Entra kullanıcı oluşturmak için aşağıdaki komutu kullanın:

    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
    

Oluşturduğunuz Microsoft Entra yöneticisi bir SQL veritabanı yöneticisi kullanıcısı olduğundan yeni bir kullanıcı oluşturmanız gerekmez.

Önemli

Azure SQL veritabanı parolasız bağlantıları, MS SQL Server Driver sürümünü 12.1.0 veya sonraki bir sürüme yükseltmeyi gerektirir. Bağlantı seçeneği authentication=DefaultAzureCredential sürümünde 12.1.0 ve authentication=ActiveDirectoryDefault sürümünde 12.2.0'dir.

Verileri Azure SQL Veritabanı'de depolama

Azure SQL Veritabanı örneğiyle Spring Cloud Azure kullanarak verileri depolayabilirsiniz.

Spring Cloud Azure Starter modülünü yüklemek için pom.xml dosyanıza aşağıdaki bağımlılıkları ekleyin:

  • Spring Cloud Azure Ürün Reçetesi( BOM):

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

    Not

    Spring Boot 4.0.x kullanıyorsanız, spring-cloud-azure-dependencies sürümünü 7.4.0 olarak ayarlayın.

    Spring Boot 3.5.x kullanıyorsanız, spring-cloud-azure-dependencies sürümünü 6.5.0 olarak ayarlayın.

    Spring Boot 3.1.x-3.5.x kullanıyorsanız, spring-cloud-azure-dependencies sürümünü 5.25.0 olarak ayarladığınızdan emin olun.

    Eğer Spring Boot 2.x kullanıyorsanız, spring-cloud-azure-dependencies sürümünü 4.20.0 olarak ayarladığınızdan emin olun.

    Bu Parça Listesi (BOM), <dependencyManagement> bölümünde pom.xml dosyanızda yapılandırılmalıdır. Bu, tüm Spring Cloud Azure bağımlılıklarının aynı sürümü kullanmasını sağlar.

    Bu ürün reçetesi için kullanılan sürüm hakkında daha fazla bilgi için bkz: Hangi Spring Cloud Azure Sürümünü Kullanmalıyım.

  • Spring Cloud Azure Starter artefaktı:

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

    Not

    Bu artefakt bir bağımlılık olduğundan, onu <dependencies> dosyasındaki bölümüne ekleyin. Daha önce eklediğiniz BOM bunu yönettiği için sürümünü belirtmeyin.

Spring Boot'ı Azure SQL Veritabanı kullanacak şekilde yapılandırma

Spring Data JDBC kullanarak verileri Azure SQL Veritabanı depolamak için uygulamayı yapılandırmak için şu adımları izleyin:

  1. application.properties yapılandırma dosyasında bir Azure SQL Veritabanı kimlik bilgisi yapılandırın.

    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
    

    Uyarı

    Yapılandırma özelliği spring.sql.init.mode=always , Spring Boot'un sunucu her başlatıldığında bir sonraki oluşturduğunuz schema.sql dosyasını kullanarak otomatik olarak bir veritabanı şeması oluşturduğu anlamına gelir. Bu özellik test için harikadır, ancak her yeniden başlatmada verilerinizi siler. Bu özelliği üretimde kullanmayın.

  1. Veritabanı şemasını yapılandırmak için src/main/resources/schema.sql yapılandırma dosyasını oluşturun ve ardından aşağıdaki içeriği ekleyin.

    DROP TABLE IF EXISTS todo;
    CREATE TABLE todo (id INT IDENTITY PRIMARY KEY, description VARCHAR(255), details VARCHAR(4096), done BIT);
    
  1. Yeni bir Todo Java sınıfı oluşturun. Bu sınıf, Spring Boot tarafından otomatik olarak oluşturulacak tabloya todo eşlenen bir etki alanı modelidir. Aşağıdaki kod, getters ve setters yöntemlerini yoksayar.

    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. Aşağıdaki içeriği göstermek için başlangıç sınıfı dosyasını düzenleyin.

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

    İpucu

    Bu öğreticide yapılandırmalarda veya kodda kimlik doğrulama işlemi yoktur. Ancak, Azure hizmetlerine bağlanmak için kimlik doğrulaması gerekir. Kimlik doğrulamasını tamamlamak için Azure Identity kullanmanız gerekir. Spring Cloud Azure, Azure Kimlik kitaplığının herhangi bir kod değişikliği yapmadan kimlik bilgilerini almanıza yardımcı olmak için sağladığı DefaultAzureCredential kullanır.

    DefaultAzureCredential birden çok kimlik doğrulama yöntemini destekler ve çalışma zamanında hangi yöntemin kullanılacağını belirler. Bu yaklaşım, uygulamanızın ortama özgü kod uygulamadan farklı ortamlarda (yerel ve üretim ortamları gibi) farklı kimlik doğrulama yöntemleri kullanmasını sağlar. Daha fazla bilgi için bkz. DefaultAzureCredential.

    Yerel geliştirme ortamlarında kimlik doğrulamasını tamamlamak için Azure CLI, Visual Studio Code, PowerShell veya diğer yöntemleri kullanabilirsiniz. Daha fazla bilgi için bkz. Java geliştirme ortamlarında Azure kimlik doğrulaması. Azure barındırma ortamlarında kimlik doğrulamasını tamamlamak için kullanıcı tarafından atanan yönetilen kimliği kullanmanızı öneririz. Daha fazla bilgi için bkz. Azure kaynakları için yönetilen kimlikler nelerdir?

  3. Uygulamayı başlatın. Uygulama verileri veritabanına depolar. Aşağıdaki örneğe benzer günlükler görürsünüz:

    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'e dağıtım yapma

Spring Boot uygulamasını yerel olarak çalıştırdığınıza göre artık uygulamayı üretim ortamına taşımanın zamanı geldi. Azure Spring Apps Spring Boot uygulamalarını kod değişikliği olmadan Azure dağıtmayı kolaylaştırır. Hizmet, geliştiricilerin kodlarına odaklanabilmesi için Spring uygulamalarının altyapısını yönetir. Azure Spring Apps kapsamlı izleme ve tanılama, yapılandırma yönetimi, hizmet bulma, CI/CD tümleştirmesi, mavi-yeşil dağıtımlar ve daha fazlasını kullanarak yaşam döngüsü yönetimi sağlar. Uygulamanızı Azure Spring Apps dağıtmak için bkz. İlk uygulamanızı Azure Spring Apps'a dağıtma.

Sonraki adımlar

Spring geliştiricileri için Azure