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, Azure HorizonDB (Önizleme) içinde 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 makaledeki adımlar PostgreSQL kimlik doğrulamasını içerir.
PostgreSQL kimlik doğrulaması PostgreSQL'de depolanan hesapları kullanır ve parolaların döndürmesini kendiniz yönetmeniz gerekir.
Prerequisites
- 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 (Cloud Shell 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_CLUSTER_NAME=<YOUR_DATABASE_CLUSTER_NAME>
export AZ_DATABASE_NAME=<YOUR_DATABASE_NAME>
export AZ_LOCATION=<YOUR_AZURE_REGION>
export AZ_POSTGRESQL_ADMIN_USERNAME=demo
export AZ_POSTGRESQL_ADMIN_PASSWORD=<YOUR_POSTGRESQL_ADMIN_PASSWORD>
export AZ_POSTGRESQL_NON_ADMIN_USERNAME=demo-non-admin
export AZ_POSTGRESQL_NON_ADMIN_PASSWORD=<YOUR_POSTGRESQL_NON_ADMIN_PASSWORD>
export AZ_LOCAL_IP_ADDRESS=<YOUR_LOCAL_IP_ADDRESS>
Yer tutucuları, bu makale boyunca kullanılan aşağıdaki değerlerle değiştirin:
-
<YOUR_DATABASE_CLUSTER_NAME>: Azure Aboneliğiniz ve Kaynak Grubunuz genelinde benzersiz olması gereken Azure HorizonDB kümenizin adı. -
<YOUR_DATABASE_NAME>: Azure HorizonDB kümenizde kullandığınız veritabanı adı. -
<YOUR_AZURE_REGION>: Kullanılacak Azure bölgesi. Varsayılan olarak kullanabilirsinizaustraliaeast, ancak yaşadığınız yere daha yakın bir bölge yapılandırabilirsiniz.az account list-locationsgirerek kullanılabilir bölgelerin tam listesini görebilirsiniz. -
<YOUR_POSTGRESQL_ADMIN_PASSWORD>ve<YOUR_POSTGRESQL_NON_ADMIN_PASSWORD>: Azure HorizonDB kümenizin parolası. Bu parola en az sekiz karakter uzunluğunda olmalıdır. Karakterler şu üç kategoriden olmalıdır: İngilizce büyük harfler, İngilizce küçük harfler, sayılar (0-9) ve büyük harf olmayan karakterler (!, $, #, %, vb.). -
<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ı bir yolu whatismyip.akamai.com açmaktır.
Ardından, aşağıdaki komutu kullanarak bir kaynak grubu oluşturun:
az group create \
--name $AZ_RESOURCE_GROUP \
--location $AZ_LOCATION \
--output tsv
Azure HorizonDB kümesi oluşturma
Note
Kaynak adlarında (örneğin, tablo adı, veritabanı adı) ve kaynak etiketlerinde kişisel, hassas veya gizli bilgi eklemeyin. Bu alanlara girdiğiniz veriler müşteri veri olarak kabul edilmez.
Aşağıdaki bölümlerde veritabanı kümenizin nasıl oluşturulacağı ve yapılandırıldığı açıklanmaktadır.
Azure HorizonDB kümesi oluşturma
Yönetici kullanıcıyı ayarlama
İlk olarak, bir yönetilen Azure HorizonDB örneği oluşturun.
Note
Azure HorizonDB oluşturma hakkında daha ayrıntılı bilgi için bkz. Azure HorizonDB kümesi oluşturma.
az horizondb create \
--resource-group $AZ_RESOURCE_GROUP \
--name $AZ_DATABASE_CLUSTER_NAME \
--location $AZ_LOCATION \
--version 17 \
--administrator-login $AZ_POSTGRESQL_ADMIN_USERNAME \
--administrator-login-password $AZ_POSTGRESQL_ADMIN_PASSWORD \
--v-cores 2 \
--yes \
--output tsv
Bu komut küçük bir Azure HorizonDB kümesi oluşturur.
Sorun mu yaşıyorsunuz? Bize bildirin.
Azure HorizonDB örneğin için güvenlik duvarı kuralı yapılandırma
Azure HorizonDB örnekleri 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 horizondb firewall-rule create \
--resource-group $AZ_RESOURCE_GROUP \
--cluster-name $AZ_DATABASE_CLUSTER_NAME \
--firewall-rule-name $AZ_DATABASE_CLUSTER_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) Azure HorizonDB kümenize 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 horizondb firewall-rule create \
--resource-group $AZ_RESOURCE_GROUP \
--cluster-name $AZ_DATABASE_CLUSTER_NAME \
--firewall-rule-name $AZ_DATABASE_CLUSTER_NAME-database-allow-local-ip \
--start-ip-address $AZ_WSL_IP_ADDRESS \
--end-ip-address $AZ_WSL_IP_ADDRESS \
--output tsv
Azure HorizonDB veritabanı oluşturma
Kümenizde yeni bir veritabanı oluşturmak için create_database.sql adlı bir SQL betiği oluşturun. Aşağıdaki içeriği ekleyin ve dosyayı yerel olarak kaydedin:
cat << EOF > create_database.sql
CREATE DATABASE "$AZ_DATABASE_NAME";
EOF
Azure HorizonDB tam nitelikli etki alanı adınızı almak ve clusterName değerini kopyalamak için bu komutu çalıştırın:
az horizondb show \
--resource-group $AZ_RESOURCE_GROUP \
--name $AZ_DATABASE_CLUSTER_NAME \
--query "{clusterName:properties.fullyQualifiedDomainName, adminUser:properties.administratorLogin}" \
--output table
clusterName Değerini kopyalayın ve aşağıdaki komutta kullanın:
AZ_HORIZONDB_FQDN=<the-copied-clusterName-value>
Ardından, SQL betiğini yürütmek ve veritabanınızı oluşturmak için aşağıdaki komutu çalıştırın:
psql "host=$AZ_HORIZONDB_FQDN user=$AZ_POSTGRESQL_ADMIN_USERNAME dbname=$AZ_DATABASE_NAME port=5432 password=$AZ_POSTGRESQL_ADMIN_PASSWORD sslmode=require" < create_database.sql
Şimdi geçici SQL betik dosyasını silmek için aşağıdaki komutu çalıştırın:
rm create_database.sql
Azure HorizonDB 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.
Yönetici olmayan bir kullanıcı oluşturmak için create_user.sql adlı bir SQL betiği oluşturun. Aşağıdaki içeriği ekleyin ve dosyayı yerel olarak kaydedin:
cat << EOF > create_user.sql
CREATE ROLE "$AZ_POSTGRESQL_NON_ADMIN_USERNAME" WITH LOGIN PASSWORD '$AZ_POSTGRESQL_NON_ADMIN_PASSWORD';
GRANT ALL PRIVILEGES ON DATABASE $AZ_DATABASE_NAME TO "$AZ_POSTGRESQL_NON_ADMIN_USERNAME";
EOF
Ardından sql betiğini yürütmek ve yönetici olmayan Microsoft Entra kullanıcı oluşturmak için aşağıdaki komutu çalıştırın:
psql "host=$AZ_HORIZONDB_FQDN user=$AZ_POSTGRESQL_ADMIN_USERNAME dbname=$AZ_DATABASE_NAME port=5432 password=$AZ_POSTGRESQL_ADMIN_PASSWORD sslmode=require" < create_user.sql
Şimdi geçici SQL betik dosyasını silmek için aşağıdaki komutu çalıştırın:
rm create_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.3.6</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ü
Azure HorizonDB'ye 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_HORIZONDB_FQDN}:5432/${AZ_DATABASE_NAME}?sslmode=require
user=${AZ_POSTGRESQL_NON_ADMIN_USERNAME}
password=${AZ_POSTGRESQL_NON_ADMIN_PASSWORD}
EOF
Note
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 . Azure HorizonDB TLS gerektirir 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ı aşağıdaki içerikle oluşturun:
DROP TABLE IF EXISTS todo;
CREATE TABLE todo (id SERIAL PRIMARY KEY, description text, details text, done BOOLEAN);
Uygulamayı kodlayın
Veritabanına bağlanın
Ardından, Azure HorizonDB örneğinizdeki verileri 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, Azure HorizonDB örneğine bağlanmak ve verilerimizi depolayan bir şema oluşturmak için application.properties ve daha önce oluşturduğumuz schema.sql dosyalarını kullanır.
Bu dosyada verileri eklemek, okumak, güncelleştirmek ve silmek için yöntemlere açıklama eklediğimizi görebilirsiniz: Bu yöntemleri bu makalenin geri kalanında kodlayacağız ve bunları birbiri ardına çözebileceksiniz.
Note
Veritabanı kimlik bilgileri, application.properties dosyasının kullanıcı ve parola özelliklerinde depolanır. Özellikler dosyası bağımsız değişken olarak geçirildiğinden, bu kimlik bilgileri DriverManager.getConnection(properties.getProperty("url"), properties); çalıştırıldığında kullanılı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 bunu yürütebilmeniz gerekir.
- Maven kullanarak şu komutu yürüterek uygulamayı çalıştırabilirsiniz:
mvn exec:java -Dexec.mainClass="com.example.demo.DemoApplication".
Uygulamanın Azure HorizonDB örneğine bağlanması, bir veritabanı şeması oluşturması ve ardından konsol günlüklerinde görebileceğiniz gibi bağlantıyı kapatması gerekir:
[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 tablosuna eşlenen ve schema.sql betiğini çalıştırırken oluşturduğunuz bir etki alanı modelidir.
Azure HorizonDB'ye 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öntemindeki aşağıdaki iki satırın yorumlarını kaldırabilirsiniz:
Todo todo = new Todo(1L, "configuration", "congratulations, you have set up JDBC correctly!", true);
insertData(todo, connection);
Ana sınıfın yürütülmesi artık aşağıdaki çıkışı üretmelidir:
[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
Azure HorizonDB'den veri okuma
Kodumuzun düzgün çalıştığını doğrulamak için daha önce eklenen verileri okuyalım.
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 metodunda aşağıdaki satırı yorum dışı bırakabilirsiniz.
todo = readData(connection);
Ana sınıfın yürütülmesi artık aşağıdaki çıkışı üretmelidir:
[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
Azure HorizonDB'de verileri güncelleştirme
Şimdi daha önce eklediğimiz verileri güncelleştirelim.
Hala 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öntemindeki aşağıdaki iki satırın yorumlarını kaldırabilirsiniz:
todo.setDetails("congratulations, you have updated data!");
updateData(todo, connection);
Ana sınıfın yürütülmesi artık aşağıdaki çıkışı üretmelidir:
[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
Azure HorizonDB'de verileri silme
Son olarak, daha önce eklediğimiz verileri silelim.
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 metodunda aşağıdaki satırı yorum dışı bırakabilirsiniz.
deleteData(todo, connection);
Ana sınıfın yürütülmesi artık aşağıdaki çıkışı üretmelidir:
[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
Tebrikler! Bir Azure HorizonDB örneğinden 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
Quickstart: Azure HorizonDB (Önizleme) - Azure HorizonDB'ye bağlanın ve sorgulayın (Önizleme)