PostgreSQL için Azure Veritabanı ile Spring Data JDBC kullanma
Bu öğreticide Spring Data JDBC kullanarak verilerin PostgreSQL için Azure Veritabanı veritabanında 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 PostgreSQL kimlik doğrulaması. Parolasız sekmesi Microsoft Entra kimlik doğrulamasını, Parola sekmesi ise PostgreSQL kimlik doğrulamasını gösterir.
Microsoft Entra kimlik doğrulaması, Microsoft Entra Kimliği'nde tanımlanan kimlikleri kullanarak PostgreSQL için Azure Veritabanı bağlanmaya yönelik bir mekanizmadır. Microsoft Entra kimlik doğrulaması ile veritabanı kullanıcı kimliklerini ve diğer Microsoft hizmetleri merkezi bir konumda yönetebilir ve bu da izin yönetimini basitleştirir.
PostgreSQL kimlik doğrulaması PostgreSQL'de depolanan hesapları kullanır. Hesaplar için kimlik bilgileri olarak parolaları kullanmayı seçerseniz, bu kimlik bilgileri tabloda depolanır user
. Bu parolalar PostgreSQL'de depolandığından, parolaların döndürmesini kendiniz yönetmeniz gerekir.
Önkoşullar
Azure aboneliği - ücretsiz bir abonelik oluşturun.
Java Development Kit (JDK), sürüm 8 veya üzeri.
Spring Boot uygulamanız yoksa Spring Initializr ile bir Maven projesi oluşturun. Maven Projesi'ni seçtiğinizden emin olun ve Bağımlılıklar'ın altında Spring Web, Spring Data JDBC ve PostgreSQL Sürücüsü bağımlılıklarını ekleyin ve ardından Java sürüm 8 veya üzerini seçin.
- Yoksa adlı bir PostgreSQL için Azure Veritabanı Esnek Sunucu örneği ve adlı
postgresqlflexibletest
demo
bir veritabanı oluşturun. Yönergeler için bkz. Hızlı Başlangıç: Azure portalında PostgreSQL için Azure Veritabanı - Esnek Sunucu oluşturma.
Örnek uygulamaya bakın
Bu öğreticide örnek bir uygulama kodlayacaksınız. Daha hızlı gitmek istiyorsanız, bu uygulama zaten kodlanmış ve adresinde https://github.com/Azure-Samples/quickstart-spring-data-jdbc-postgresqlkullanılabilir.
PostgreSQL sunucunuz için güvenlik duvarı kuralı yapılandırma
PostgreSQL için Azure 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. PostgreSQL için Azure Veritabanı - Esnek Sunucu'da güvenlik duvarı kuralları.
PostgreSQL sunucunuza windows bilgisayardaki Linux için Windows Alt Sistemi (WSL) üzerinden bağlanıyorsanız WSL ana bilgisayar kimliğini güvenlik duvarınıza eklemeniz gerekir.
PostgreSQL yönetici olmayan kullanıcı oluşturma ve izin verme
Ardından, yönetici olmayan bir kullanıcı oluşturun ve veritabanına tüm izinleri verin.
Parolasız bağlantı kullanan yönetici olmayan bir kullanıcı oluşturmak için aşağıdaki yöntemi kullanabilirsiniz.
Azure CLI için Hizmet Bağlayıcısı parolasız uzantısını yüklemek için aşağıdaki komutu kullanın:
az extension add --name serviceconnector-passwordless --upgrade
Yönetici olmayan Microsoft Entra kullanıcısını oluşturmak için aşağıdaki komutu kullanın:
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
Komut tamamlandığında konsol çıkışındaki kullanıcı adını not alın.
PostgreSQL için Azure Veritabanı verilerini depolama
Artık PostgreSQL için Azure Veritabanı Esnek Sunucu örneğiniz olduğuna göre Spring Cloud Azure'ı kullanarak verileri depolayabilirsiniz.
Spring Cloud Azure Starter JDBC PostgreSQL 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>5.18.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
Not
Spring Boot 2.x kullanıyorsanız, sürümünü olarak
4.19.0
ayarladığınızdanspring-cloud-azure-dependencies
emin olun. Bu Ürün Reçetesi (BOM), pom.xml dosyanızın bölümünde yapılandırılmalıdır<dependencyManagement>
. 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 . Spring Cloud Azure'ın Hangi Sürümünü Kullanmalıyım.Spring Cloud Azure Starter JDBC PostgreSQL yapıtı:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-jdbc-postgresql</artifactId> </dependency>
Not
Sürümünden 4.5.0
bu yana parolasız bağlantılar desteklenmektedir.
Spring Boot'ı PostgreSQL için Azure Veritabanı kullanacak şekilde yapılandırma
Spring Data JDBC kullanarak PostgreSQL için Azure Veritabanı verilerini depolamak için uygulamayı yapılandırmak için şu adımları izleyin:
application.properties yapılandırma dosyanıza aşağıdaki özellikleri ekleyerek PostgreSQL için Azure Veritabanı kimlik bilgilerini yapılandırın.
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
Uyarı
Yapılandırma özelliği
spring.sql.init.mode=always
, Spring Boot'un sunucu her başlatıldığında bir sonraki oluşturacağınız schema.sql dosyasını kullanarak otomatik olarak bir veritabanı şeması oluşturacağı anlamına gelir. Bu özellik test için harikadır, ancak her yeniden başlatmada verilerinizi sileceğini unutmayın; bu nedenle üretimde kullanmamalısınız.
- Yoksa adlı bir PostgreSQL için Azure Veritabanı Tek Sunucu örneği ve adlı
postgresqlsingletest
demo
bir veritabanı oluşturun. Yönergeler için bkz. Hızlı Başlangıç: Azure portalını kullanarak PostgreSQL için Azure Veritabanı sunucusu oluşturma.
Örnek uygulamaya bakın
Bu makalede örnek bir uygulama kodlayacaksınız. Daha hızlı gitmek istiyorsanız, bu uygulama zaten kodlanmış ve adresinde https://github.com/Azure-Samples/quickstart-spring-data-jdbc-postgresqlkullanılabilir.
PostgreSQL sunucunuz için güvenlik duvarı kuralı yapılandırma
PostgreSQL için Azure 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. Azure portalını kullanarak PostgreSQL için Azure Veritabanı - Tek Sunucu için güvenlik duvarı kuralları oluşturma ve yönetme.
PostgreSQL sunucunuza windows bilgisayardaki Linux için Windows Alt Sistemi (WSL) üzerinden bağlanıyorsanız WSL ana bilgisayar kimliğini güvenlik duvarınıza eklemeniz gerekir.
PostgreSQL yönetici olmayan kullanıcı oluşturma ve izin verme
Ardından, yönetici olmayan bir kullanıcı oluşturun ve veritabanına tüm izinleri verin.
Parolasız bağlantı kullanan yönetici olmayan bir kullanıcı oluşturmak için aşağıdaki yöntemi kullanabilirsiniz.
Azure CLI için Hizmet Bağlayıcısı parolasız uzantısını yüklemek için aşağıdaki komutu kullanın:
az extension add --name serviceconnector-passwordless --upgrade
Yönetici olmayan Microsoft Entra kullanıcısını oluşturmak için aşağıdaki komutu kullanın:
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
Komut tamamlandığında konsol çıkışındaki kullanıcı adını not alın.
PostgreSQL için Azure Veritabanı verilerini depolama
Artık PostgreSQL için Azure Veritabanı Tek sunucu örneğiniz olduğuna göre Spring Cloud Azure'ı kullanarak verileri depolayabilirsiniz.
Spring Cloud Azure Starter JDBC PostgreSQL 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>5.18.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
Not
Spring Boot 2.x kullanıyorsanız, sürümünü olarak
4.19.0
ayarladığınızdanspring-cloud-azure-dependencies
emin olun. Bu Ürün Reçetesi (BOM), pom.xml dosyanızın bölümünde yapılandırılmalıdır<dependencyManagement>
. 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 . Spring Cloud Azure'ın Hangi Sürümünü Kullanmalıyım.Spring Cloud Azure Starter JDBC PostgreSQL yapıtı:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-jdbc-postgresql</artifactId> </dependency>
Not
Sürümünden 4.5.0
bu yana parolasız bağlantılar desteklenmektedir.
Spring Boot'ı PostgreSQL için Azure Veritabanı kullanacak şekilde yapılandırma
Spring Data JDBC kullanarak PostgreSQL için Azure Veritabanı verilerini depolamak için uygulamayı yapılandırmak için şu adımları izleyin:
application.properties yapılandırma dosyanıza aşağıdaki özellikleri ekleyerek PostgreSQL için Azure Veritabanı kimlik bilgilerini yapılandırın.
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
Uyarı
Yapılandırma özelliği
spring.sql.init.mode=always
, Spring Boot'un sunucu her başlatıldığında bir sonraki oluşturacağınız schema.sql dosyasını kullanarak otomatik olarak bir veritabanı şeması oluşturacağı anlamına gelir. Bu özellik test için harikadır, ancak her yeniden başlatmada verilerinizi sileceğini unutmayın; bu nedenle üretimde kullanmamalısınız.
Veritabanı şemasını yapılandırmak için src/main/resources/schema.sql yapılandırma dosyasını oluşturun ve aşağıdaki içeriği ekleyin.
DROP TABLE IF EXISTS todo; CREATE TABLE todo (id SERIAL PRIMARY KEY, description VARCHAR(255), details VARCHAR(4096), done BOOLEAN);
Yeni
Todo
bir Java sınıfı oluşturun. Bu sınıf, Spring Boot tarafından otomatik olarak oluşturulacak tabloyatodo
eşlenen bir etki alanı modelidir. Aşağıdaki kod vesetters
yöntemlerini yoksayargetters
.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; }
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ığı öğesini kullanır
DefaultAzureCredential
.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?
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ğıtma
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 , kod değişikliği yapmadan Spring Boot uygulamalarını Azure'a 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'e dağıtmak için bkz . İlk uygulamanızı Azure Spring Apps'e dağıtma.