Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makalede, PostgreSQL için Azure Veri Tabanı'da bilgi depolamak ve almak için Java ve JDBC kullanan örnek bir uygulamanın nasıl oluşturulacağı gösterilmektedir.
JDBC, geleneksel ilişkisel veritabanlarına bağlanmak için standart Java API'dir.
Bu makale iki kimlik doğrulama yöntemi içerir: 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ı kullanarak, veritabanı kullanıcı kimliklerini ve diğer Microsoft hizmetleri merkezi bir konumda yönetebilirsiniz 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 bilgilerini tabloda depolayın user . Bu parolalar PostgreSQL'de depolandığından, parolaların dönüşünü kendiniz yönetmeniz gerekir.
Önkoşullar
- Bir Azure hesabı. Azure hesabınız yoksa ücretsiz bir deneme hesabı edinin.
- Azure Cloud Shell veya Azure CLI. Otomatik olarak kimlik doğrulaması yapmak ve ihtiyacınız olan tüm araçlara erişebilmek için Azure Cloud Shell kullanın.
- Desteklenen bir Java Geliştirme Seti, sürüm 8 (Azure Cloud Shell'e dahildir).
- Apache Maven derleme aracı.
Çalışma ortamını hazırlama
İlk olarak, bazı ortam değişkenlerini ayarlamak için aşağıdaki komutu kullanın.
export AZ_RESOURCE_GROUP=database-workshop
export AZ_DATABASE_SERVER_NAME=<YOUR_DATABASE_SERVER_NAME>
export AZ_DATABASE_NAME=<YOUR_DATABASE_NAME>
export AZ_LOCATION=<YOUR_AZURE_REGION>
export AZ_POSTGRESQL_AD_NON_ADMIN_USERNAME=<YOUR_POSTGRESQL_AD_NON_ADMIN_USERNAME>
export AZ_LOCAL_IP_ADDRESS=<YOUR_LOCAL_IP_ADDRESS>
export CURRENT_USERNAME=$(az ad signed-in-user show --query userPrincipalName -o tsv)
Yer tutucuları, bu makale boyunca kullanılan aşağıdaki değerlerle değiştirin:
-
<YOUR_DATABASE_SERVER_NAME>: Azure genelinde benzersiz olması gereken PostgreSQL için Azure Veri Tabanı esnek sunucunuzun adı. -
<YOUR_DATABASE_NAME>: Azure içinde benzersiz olması gereken PostgreSQL için Azure Veri Tabanı esnek sunucunun veritabanı adı. -
<YOUR_AZURE_REGION>: Kullanılacak Azure bölgesi. Varsayılan olarak kullanabilirsinizeastus, ancak yaşadığınız yere daha yakın bir bölge seçebilirsiniz. Kullanılabilir bölgelerin tam listesini görmek için girinaz account list-locations. -
<YOUR_POSTGRESQL_AD_NON_ADMIN_USERNAME>: PostgreSQL için Azure Veri Tabanı esnek sunucunuzun kullanıcı adı. Kullanıcı adının Microsoft Entra kiracınızda geçerli bir kullanıcı olduğundan emin olun. -
<YOUR_LOCAL_IP_ADDRESS>: Spring Boot uygulamanızı çalıştırdığınız yerel bilgisayarınızın IP adresi. Bunu bulmanın kullanışlı yollarından biri whatismyip.akamai.com açmaktır.
Önemli
ayarlarken<YOUR_POSTGRESQL_AD_NON_ADMIN_USERNAME>, kullanıcının Microsoft Entra kiracınızda zaten mevcut olması gerekir veya veritabanınızda Microsoft Entra kullanıcı oluşturamazsınız.
Ardından, aşağıdaki komutu kullanarak bir kaynak grubu oluşturun:
az group create \
--name $AZ_RESOURCE_GROUP \
--location $AZ_LOCATION \
--output tsv
Esnek sunucu oluşturma
Aşağıdaki bölümlerde veritabanı örneğinizin nasıl oluşturulacağı ve yapılandırıldığı açıklanmaktadır.
Esnek sunucu oluşturma ve yönetici kullanıcıyı ayarlama
Uyarı
PostgreSQL için Azure Veri Tabanı esnek sunucu oluşturma hakkında daha ayrıntılı bilgi için bkz. Hızlı Başlangıç: PostgreSQL için Azure Veri Tabanı esnek sunucu oluşturma.
Azure CLI kullanıyorsanız, yeterli izne sahip olduğundan emin olmak için aşağıdaki komutu çalıştırın:
az login --scope https://graph.microsoft.com/.default
Sunucuyu oluşturmak için aşağıdaki komutu çalıştırın:
az postgres flexible-server create \
--resource-group $AZ_RESOURCE_GROUP \
--name $AZ_DATABASE_SERVER_NAME \
--location $AZ_LOCATION \
--yes \
--output tsv
Sunucuyu oluşturduktan sonra bir Microsoft Entra yöneticisi ayarlamak için PostgreSQL için Azure Veritabanı'nda Microsoft Entra rollerini yönetme makalesindeki adımları izleyin.
Önemli
Bir yönetici ayarladığınızda, PostgreSQL için Azure Veri Tabanı esnek sunucunun Azure veritabanına tam yönetici ayrıcalıklarına sahip yeni bir kullanıcı eklersiniz. PostgreSQL için Azure Veri Tabanı esnek sunucu başına birden çok Microsoft Entra yöneticisi oluşturabilirsiniz.
Sorun mu yaşıyorsunuz? Bize bildirin.
PostgreSQL için Azure Veritabanı örneğiniz için güvenlik duvarı kuralı yapılandırma
PostgreSQL için Azure Veri Tabanı esnek sunucular varsayılan olarak güvenlidir. Tüm gelen bağlantıları engelleyen bir güvenlik duvarı vardır. Veritabanınızı kullanmak için, yerel IP adresinize veritabanı sunucusuna erişim veren bir güvenlik duvarı kuralı ekleyin.
Bu makalenin başında yerel IP adresinizi yapılandırdığınızdan, aşağıdaki komutu çalıştırarak sunucunun güvenlik duvarını açabilirsiniz:
az postgres flexible-server firewall-rule create \
--resource-group $AZ_RESOURCE_GROUP \
--name $AZ_DATABASE_SERVER_NAME \
--rule-name $AZ_DATABASE_SERVER_NAME-database-allow-local-ip \
--start-ip-address $AZ_LOCAL_IP_ADDRESS \
--end-ip-address $AZ_LOCAL_IP_ADDRESS \
--output tsv
Windows bir bilgisayarda Linux için Windows Alt Sistemi 'den (WSL) PostgreSQL için Azure Veri Tabanı esnek sunucunuza bağlanıyorsanız, WSL ana bilgisayar kimliğini güvenlik duvarınıza eklemeniz gerekir.
WSL'de aşağıdaki komutu çalıştırarak konak makinenizin IP adresini alın:
cat /etc/resolv.conf
terimini nameserverizleyen IP adresini kopyalayın ve WSL IP Adresi için bir ortam değişkeni ayarlamak için aşağıdaki komutu kullanın:
AZ_WSL_IP_ADDRESS=<the-copied-IP-address>
Ardından aşağıdaki komutu kullanarak sunucunun güvenlik duvarını WSL tabanlı uygulamanızda açın:
az postgres flexible-server firewall-rule create \
--resource-group $AZ_RESOURCE_GROUP \
--name $AZ_DATABASE_SERVER_NAME \
--rule-name $AZ_DATABASE_SERVER_NAME-database-allow-local-ip \
--start-ip-address $AZ_WSL_IP_ADDRESS \
--end-ip-address $AZ_WSL_IP_ADDRESS \
--output tsv
PostgreSQL için Azure Veritabanı veritabanını yapılandırma
Aşağıdaki komutu kullanarak yeni bir veritabanı oluşturun:
az postgres flexible-server db create \
--resource-group $AZ_RESOURCE_GROUP \
--database-name $AZ_DATABASE_NAME \
--server-name $AZ_DATABASE_SERVER_NAME \
--output tsv
PostgreSQL için Azure Veri Tabanı'de admin olmayan kullanıcı oluşturma ve izinler tanımlama
Ardından, yönetici olmayan bir kullanıcı oluşturun ve veritabanına tüm izinleri verin.
Uyarı
PostgreSQL için Azure Veri Tabanı kullanıcıları yönetme hakkında daha ayrıntılı bilgi için bkz. PostgreSQL için Azure Veri Tabanı'da Microsoft Entra rollerini yönetme.
Yönetici olmayan kullanıcı oluşturmak için create_ad_user.sql adlı bir SQL betiği oluşturun. Aşağıdaki içeriği ekleyin ve yerel olarak kaydedin:
cat << EOF > create_ad_user.sql
select * from pgaadauth_create_principal('$AZ_POSTGRESQL_AD_NON_ADMIN_USERNAME', false, false);
EOF
Ardından sql betiğini çalıştırmak ve yönetici olmayan Microsoft Entra kullanıcı oluşturmak için aşağıdaki komutu kullanın:
psql "host=$AZ_DATABASE_SERVER_NAME.postgres.database.azure.com user=$CURRENT_USERNAME dbname=postgres port=5432 password=$(az account get-access-token --resource-type oss-rdbms --output tsv --query accessToken) sslmode=require" < create_ad_user.sql
Geçici SQL betik dosyasını kaldırmak için aşağıdaki komutu kullanın:
rm create_ad_user.sql
Yeni java projesi oluşturma
Sık kullandığınız IDE'yi kullanarak, Java 8 veya sonraki bir sürümü kullanarak yeni bir Java projesi oluşturun. Kök dizine aşağıdaki içeriklere sahip bir pom.xml dosyası ekleyin:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<properties>
<java.version>1.8</java.version>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.7.5</version>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity-extensions</artifactId>
<version>1.2.0</version>
</dependency>
</dependencies>
</project>
Bu dosya, projenizi kullanacak şekilde yapılandıran bir Apache Maven dosyasıdır:
- Java 8
- Java için son kullanılan bir PostgreSQL sürücüsü
PostgreSQL için Azure Veritabanı'na bağlanmak için yapılandırma dosyası hazırlama
Src/main/resources/application.properties dosyası oluşturun ve aşağıdaki içeriği ekleyin:
cat << EOF > src/main/resources/application.properties
url=jdbc:postgresql://${AZ_DATABASE_SERVER_NAME}.postgres.database.azure.com:5432/${AZ_DATABASE_NAME}?sslmode=require&authenticationPluginClassName=com.azure.identity.extensions.jdbc.postgresql.AzurePostgresqlAuthenticationPlugin
user=${AZ_POSTGRESQL_AD_NON_ADMIN_USERNAME}
EOF
Uyarı
Yapılandırma özelliği url , JDBC sürücüsünün veritabanına bağlanırken TLS (Aktarım Katmanı Güvenliği) kullanmasını sağlamayı içerir ?sslmode=require . TLS'nin PostgreSQL için Azure Veri Tabanı esnek sunucularda kullanılması zorunludur ve önerilen bir güvenlik uygulamasıdır.
Veritabanı şemasını oluşturmak için SQL dosyası oluşturma
Veritabanı şeması oluşturmak için src/main/resources/schema.sql dosyası kullanın. Bu dosyayı 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);
Uygulamayı kodlayın
Aşağıdaki bölümlerde, veritabanına bağlanan, bir veri modeli tanımlayan ve temel CRUD işlemlerini gerçekleştiren Java kodunun nasıl yazılacağı adım adım açıklanmaktadır.
Veritabanına bağlanın
Ardından, PostgreSQL için Azure Veri Tabanı esnek sunucunuzdan veri depolamak ve almak için JDBC kullanan Java kodunu ekleyin.
Src /main/java/DemoApplication.java dosyası oluşturun ve aşağıdaki içeriği ekleyin:
package com.example.demo;
import java.sql.*;
import java.util.*;
import java.util.logging.Logger;
public class DemoApplication {
private static final Logger log;
static {
System.setProperty("java.util.logging.SimpleFormatter.format", "[%4$-7s] %5$s %n");
log =Logger.getLogger(DemoApplication.class.getName());
}
public static void main(String[] args) throws Exception {
log.info("Loading application properties");
Properties properties = new Properties();
properties.load(DemoApplication.class.getClassLoader().getResourceAsStream("application.properties"));
log.info("Connecting to the database");
Connection connection = DriverManager.getConnection(properties.getProperty("url"), properties);
log.info("Database connection test: " + connection.getCatalog());
log.info("Create database schema");
Scanner scanner = new Scanner(DemoApplication.class.getClassLoader().getResourceAsStream("schema.sql"));
Statement statement = connection.createStatement();
while (scanner.hasNextLine()) {
statement.execute(scanner.nextLine());
}
/*
Todo todo = new Todo(1L, "configuration", "congratulations, you have set up JDBC correctly!", true);
insertData(todo, connection);
todo = readData(connection);
todo.setDetails("congratulations, you have updated data!");
updateData(todo, connection);
deleteData(todo, connection);
*/
log.info("Closing database connection");
connection.close();
}
}
Sorun mu yaşıyorsunuz? Bize bildirin.
Bu Java kodu, daha önce oluşturduğunuz application.properties ve schema.sql dosyalarını kullanarak PostgreSQL için Azure Veri Tabanı esnek sunucuya bağlanır ve verileri depolayan bir şema oluşturur.
Bu dosyada, veri ekleme, okuma, güncelleme ve silme yöntemleri yorum satırına alınmıştır. Bu makalenin geri kalanında bu yöntemlerin nasıl kodlanacağı adım adım anlatılmakta olup, bunların yorumunu sırayla kaldırabilirsiniz.
Uyarı
Veritabanı kimlik bilgileri, application.properties dosyasının kullanıcı ve parola özelliklerinde depolanır. Kod, özellik dosyası bir argüman olarak geçirildiği için DriverManager.getConnection(properties.getProperty("url"), properties); yürütülürken bu kimlik bilgilerini kullanır.
Artık bu ana sınıfı sık kullandığınız araçla yürütebilirsiniz:
- IDE'nizi kullanarak DemoApplication sınıfına sağ tıklayıp yürütebilirsiniz.
- Maven kullanarak şu komutu yürüterek uygulamayı çalıştırabilirsiniz:
mvn exec:java -Dexec.mainClass="com.example.demo.DemoApplication".
Uygulama PostgreSQL için Azure Veri Tabanı esnek sunucusuna bağlanır, bir veritabanı şeması oluşturur ve konsol günlüklerinde gördüğünüz gibi bağlantıyı kapatır:
[INFO ] Loading application properties
[INFO ] Connecting to the database
[INFO ] Database connection test: demo
[INFO ] Create database schema
[INFO ] Closing database connection
Etki alanı sınıfı oluşturma
sınıfının yanında Todo yeni DemoApplication bir Java sınıfı oluşturun ve aşağıdaki kodu ekleyin:
package com.example.demo;
public class Todo {
private Long id;
private String description;
private String details;
private boolean done;
public Todo() {
}
public Todo(Long id, String description, String details, boolean done) {
this.id = id;
this.description = description;
this.details = details;
this.done = done;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getDetails() {
return details;
}
public void setDetails(String details) {
this.details = details;
}
public boolean isDone() {
return done;
}
public void setDone(boolean done) {
this.done = done;
}
@Override
public String toString() {
return "Todo{" +
"id=" + id +
", description='" + description + '\'' +
", details='" + details + '\'' +
", done=" + done +
'}';
}
}
Bu sınıf, todo betiğini yürütürken oluşturduğunuz tabloyla eşlenen bir etki alanı modelidir.
PostgreSQL için Azure Veritabanı'na veri ekleme
src/main/java/DemoApplication.java dosyasında, main yönteminden sonra veritabanına veri eklemek için aşağıdaki yöntemi ekleyin:
private static void insertData(Todo todo, Connection connection) throws SQLException {
log.info("Insert data");
PreparedStatement insertStatement = connection
.prepareStatement("INSERT INTO todo (id, description, details, done) VALUES (?, ?, ?, ?);");
insertStatement.setLong(1, todo.getId());
insertStatement.setString(2, todo.getDescription());
insertStatement.setString(3, todo.getDetails());
insertStatement.setBoolean(4, todo.isDone());
insertStatement.executeUpdate();
}
Artık main yönteminde aşağıdaki iki satırı yorum satırı olmaktan çıkarabilirsiniz:
Todo todo = new Todo(1L, "configuration", "congratulations, you have set up JDBC correctly!", true);
insertData(todo, connection);
Ana sınıfı yürütürken aşağıdaki çıkışı üretmesi gerekir:
[INFO ] Loading application properties
[INFO ] Connecting to the database
[INFO ] Database connection test: demo
[INFO ] Create database schema
[INFO ] Insert data
[INFO ] Closing database connection
PostgreSQL için Azure Veri Tabanı'dan veri okuma
Kodunuzun düzgün çalıştığını doğrulamak için daha önce eklediğiniz verileri okuyun.
src/main/java/DemoApplication.java dosyasında, yönteminden insertData sonra veritabanındaki verileri okumak için aşağıdaki yöntemi ekleyin:
private static Todo readData(Connection connection) throws SQLException {
log.info("Read data");
PreparedStatement readStatement = connection.prepareStatement("SELECT * FROM todo;");
ResultSet resultSet = readStatement.executeQuery();
if (!resultSet.next()) {
log.info("There is no data in the database!");
return null;
}
Todo todo = new Todo();
todo.setId(resultSet.getLong("id"));
todo.setDescription(resultSet.getString("description"));
todo.setDetails(resultSet.getString("details"));
todo.setDone(resultSet.getBoolean("done"));
log.info("Data read from the database: " + todo.toString());
return todo;
}
Artık main yönteminde aşağıdaki satırı yorumdan çıkarabilirsiniz:
todo = readData(connection);
Ana sınıfı yürütürken aşağıdaki çıkışı üretmesi gerekir:
[INFO ] Loading application properties
[INFO ] Connecting to the database
[INFO ] Database connection test: demo
[INFO ] Create database schema
[INFO ] Insert data
[INFO ] Read data
[INFO ] Data read from the database: Todo{id=1, description='configuration', details='congratulations, you have set up JDBC correctly!', done=true}
[INFO ] Closing database connection
PostgreSQL için Azure Veri Tabanı'da verileri güncelleştirme
Verileri güncelleştirmek için aşağıdaki adımları kullanın.
Yine src/main/java/DemoApplication.java dosyasında, readData yönteminden sonra veritabanındaki verileri güncellemek için aşağıdaki yöntemi ekleyin:
private static void updateData(Todo todo, Connection connection) throws SQLException {
log.info("Update data");
PreparedStatement updateStatement = connection
.prepareStatement("UPDATE todo SET description = ?, details = ?, done = ? WHERE id = ?;");
updateStatement.setString(1, todo.getDescription());
updateStatement.setString(2, todo.getDetails());
updateStatement.setBoolean(3, todo.isDone());
updateStatement.setLong(4, todo.getId());
updateStatement.executeUpdate();
readData(connection);
}
Artık main yönteminde aşağıdaki iki satırı yorum satırı olmaktan çıkarabilirsiniz:
todo.setDetails("congratulations, you have updated data!");
updateData(todo, connection);
Ana sınıfı yürütürken aşağıdaki çıkışı üretmesi gerekir:
[INFO ] Loading application properties
[INFO ] Connecting to the database
[INFO ] Database connection test: demo
[INFO ] Create database schema
[INFO ] Insert data
[INFO ] Read data
[INFO ] Data read from the database: Todo{id=1, description='configuration', details='congratulations, you have set up JDBC correctly!', done=true}
[INFO ] Update data
[INFO ] Read data
[INFO ] Data read from the database: Todo{id=1, description='configuration', details='congratulations, you have updated data!', done=true}
[INFO ] Closing database connection
PostgreSQL için Azure Veri Tabanı'da verileri silme
Son olarak, daha önce eklediğiniz verileri silin.
Src/main/java/DemoApplication.java dosyasında, yönteminden updateData sonra veritabanının içindeki verileri silmek için aşağıdaki yöntemi ekleyin:
private static void deleteData(Todo todo, Connection connection) throws SQLException {
log.info("Delete data");
PreparedStatement deleteStatement = connection.prepareStatement("DELETE FROM todo WHERE id = ?;");
deleteStatement.setLong(1, todo.getId());
deleteStatement.executeUpdate();
readData(connection);
}
Artık main yönteminde aşağıdaki satırı yorumdan çıkarabilirsiniz:
deleteData(todo, connection);
Ana sınıfı yürütürken aşağıdaki çıkışı üretmesi gerekir:
[INFO ] Loading application properties
[INFO ] Connecting to the database
[INFO ] Database connection test: demo
[INFO ] Create database schema
[INFO ] Insert data
[INFO ] Read data
[INFO ] Data read from the database: Todo{id=1, description='configuration', details='congratulations, you have set up JDBC correctly!', done=true}
[INFO ] Update data
[INFO ] Read data
[INFO ] Data read from the database: Todo{id=1, description='configuration', details='congratulations, you have updated data!', done=true}
[INFO ] Delete data
[INFO ] Read data
[INFO ] There is no data in the database!
[INFO ] Closing database connection
Kaynakları temizle
PostgreSQL için Azure Veri Tabanı esnek bir sunucudan veri depolamak ve almak için JDBC kullanan bir Java uygulaması oluşturdunuz.
Bu hızlı başlangıç sırasında kullanılan tüm kaynakları temizlemek için aşağıdaki komutu kullanarak kaynak grubunu silin:
az group delete \
--name $AZ_RESOURCE_GROUP \
--yes
İlgili içerik
- Azure portalını kullanarak PostgreSQL için Azure Veritabanı'nı yönetme
- Hızlı Başlangıç: PostgreSQL için Azure Veritabanı'na bağlanmak ve verileri sorgulamak için Python kullanma
- Hızlı Başlangıç: PostgreSQL için Azure Veritabanı'na bağlanmak ve veri sorgulamak için .NET (C#) kullanma
- Hızlı Başlangıç: PostgreSQL için Azure Veritabanı'na bağlanmak ve verileri sorgulamak için Go dilini kullanma
- Hızlı Başlangıç: PostgreSQL için Azure Veritabanı'na bağlanmak ve verileri sorgulamak için PHP kullanma
- Hızlı Başlangıç: PostgreSQL için Azure Veritabanı ile Azure CLI ile bağlanma ve sorgulama
- Hızlı Başlangıç: Power BI'da PostgreSQL için Azure Veritabanı'ndan verileri içeri aktarma