Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ez a cikk bemutatja, hogyan hozhat létre mintaalkalmazást, amely Java és JDBC használatával tárolja és kéri le az adatokat Azure Database for PostgreSQL.
A JDBC a hagyományos relációs adatbázisokhoz való csatlakozás szabványos Java API-ja.
Ez a cikk két hitelesítési módszert tartalmaz: Microsoft Entra hitelesítést és PostgreSQL-hitelesítést. A Jelszó nélküli lapon a Microsoft Entra-hitelesítés, a Jelszó lapon pedig a PostgreSQL-hitelesítés látható.
A Microsoft Entra-hitelesítés az Azure Database for PostgreSQL-hez való csatlakozás mechanizmusa a Microsoft Entra ID-ban meghatározott identitások használatával. A Microsoft Entra hitelesítés használatával központi helyen kezelheti az adatbázis felhasználói identitásait és más Microsoft-szolgáltatások, ami leegyszerűsíti az engedélykezelést.
A PostgreSQL-hitelesítés a PostgreSQL-ben tárolt fiókokat használja. Ha jelszavakat használ a fiókok hitelesítő adataiként, tárolja ezeket a hitelesítő adatokat a user táblában. Mivel ezek a jelszavak a PostgreSQL-ben vannak tárolva, saját maga kell kezelnie a jelszavak rotálását.
Előfeltételek
- Egy Azure-fiók. Ha még nincs fiókja, szerezze be az ingyenes próbaverziót.
- Azure Cloud Shell vagy Azure CLI. A Azure Cloud Shell használatával automatikusan hitelesítheti magát, és hozzáférhet az összes szükséges eszközhöz.
- Támogatott Java Development Kit, 8-es verzió (az Azure Cloud Shell része).
- Az Apache Maven építőeszköz.
A munkakörnyezet előkészítése
Először a következő paranccsal állítson be néhány környezeti változót.
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)
Cserélje le a helyőrzőket a következő értékekre, melyeket a cikkben használni fogunk:
-
<YOUR_DATABASE_SERVER_NAME>: Az Ön Azure Database for PostgreSQL rugalmas kiszolgálójának neve, amelynek az Azure-on belül egyedinek kell lennie. -
<YOUR_DATABASE_NAME>: A rugalmas Azure Database for PostgreSQL kiszolgáló adatbázisneve, amelynek egyedinek kell lennie a Azure belül. -
<YOUR_AZURE_REGION>: A használni kívánt Azure-régió. Alapértelmezés szerint használhatjaeastus, de válasszon egy, a lakóhelyéhez közelebbi régiót. Az elérhető régiók teljes listájának megtekintéséhez írja be a következőtaz account list-locations: -
<YOUR_POSTGRESQL_AD_NON_ADMIN_USERNAME>: Az Azure Database for PostgreSQL rugalmas kiszolgálóhoz tartozó felhasználónév. Ellenőrizze, hogy a felhasználónév a Microsoft Entra-bérlőjében érvényes felhasználóhoz tartozik-e. -
<YOUR_LOCAL_IP_ADDRESS>: A helyi számítógép IP-címe, amelyről a Spring Boot-alkalmazást futtatja. Az egyik kényelmes módja annak, hogy megtalálja, hogy nyissa meg whatismyip.akamai.com.
Fontos
A(z) <YOUR_POSTGRESQL_AD_NON_ADMIN_USERNAME> beállításakor a felhasználónak már léteznie kell a Microsoft Entra-bérlőben, ellenkező esetben nem hozhat létre Microsoft Entra-felhasználót az adatbázisban.
Ezután hozzon létre egy erőforráscsoportot a következő paranccsal:
az group create \
--name $AZ_RESOURCE_GROUP \
--location $AZ_LOCATION \
--output tsv
Rugalmas kiszolgáló létrehozása
Az alábbi szakaszok az adatbázispéldány létrehozását és konfigurálását ismertetik.
Rugalmas kiszolgáló létrehozása és rendszergazdai felhasználó beállítása
Megjegyzés:
A Azure Database for PostgreSQL rugalmas kiszolgálók létrehozásáról további információt a Azure Database for PostgreSQL rugalmas kiszolgáló létrehozása című rövid útmutatóban talál.
Ha Azure CLI-t használ, futtassa a következő parancsot, hogy meggyőződjön arról, hogy rendelkezik-e megfelelő engedéllyel:
az login --scope https://graph.microsoft.com/.default
Futtassa a következő parancsot a kiszolgáló létrehozásához:
az postgres flexible-server create \
--resource-group $AZ_RESOURCE_GROUP \
--name $AZ_DATABASE_SERVER_NAME \
--location $AZ_LOCATION \
--yes \
--output tsv
Ha a kiszolgáló létrehozása után microsoft entra-rendszergazdat szeretne beállítani, kövesse a Microsoft Entra-szerepkörök kezelése az Azure Database for PostgreSQL-ben című témakörben leírt lépéseket.
Fontos
Rendszergazda beállításakor új, teljes rendszergazdai jogosultságokkal rendelkező felhasználót ad hozzá a Azure Database for PostgreSQL rugalmas kiszolgáló Azure adatbázisához. Azure Database for PostgreSQL rugalmas kiszolgálónként több Microsoft Entra-rendszergazdát is létrehozhat.
Problémái vannak? Értesítsen minket.
Tűzfalszabály konfigurálása az Azure Database for PostgreSQL-példányhoz
Azure Database for PostgreSQL rugalmas kiszolgálók alapértelmezés szerint biztonságosak. Van egy tűzfaluk, amely blokkolja az összes bejövő kapcsolatot. Az adatbázis használatához adjon hozzá egy tűzfalszabályt, amely hozzáférést biztosít a helyi IP-címnek az adatbázis-kiszolgálóhoz.
Mivel a cikk elején konfigurálta a helyi IP-címet, az alábbi parancs futtatásával megnyithatja a kiszolgáló tűzfalát:
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
Ha egy Windows rendszerű számítógépen futó Linuxos Windows-alrendszerból (WSL) csatlakozik az Azure Database for PostgreSQL rugalmas kiszolgálójához, hozzá kell adnia a WSL-gazdaazonosítót a tűzfalhoz.
A következő parancs WSL-ben való futtatásával kérje le a gazdagép IP-címét:
cat /etc/resolv.conf
Másolja ki a kifejezést nameserverkövető IP-címet, majd az alábbi paranccsal állítson be környezeti változót a WSL IP-címéhez:
AZ_WSL_IP_ADDRESS=<the-copied-IP-address>
Ezután a következő paranccsal nyissa meg a kiszolgáló tűzfalát a WSL-alapú alkalmazás számára:
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
A PostgreSQL-adatbázis Azure Database konfigurálása
Hozzon létre egy új adatbázist a következő paranccsal:
az postgres flexible-server db create \
--resource-group $AZ_RESOURCE_GROUP \
--database-name $AZ_DATABASE_NAME \
--server-name $AZ_DATABASE_SERVER_NAME \
--output tsv
Azure Database for PostgreSQL nem rendszergazdai felhasználó létrehozása és engedély megadása
Ezután hozzon létre egy nem rendszergazdai felhasználót, és adjon meg minden engedélyt az adatbázisnak.
Megjegyzés:
A Azure Database for PostgreSQL felhasználók kezelésével kapcsolatos további információkért lásd: Microsoft Entra szerepkörök kezelése Azure Database for PostgreSQL.
Hozzon létre egy create_ad_user.sql nevű SQL-szkriptet, amely nem rendszergazdai felhasználót hoz létre. Adja hozzá a következő tartalmat, és mentse helyileg:
cat << EOF > create_ad_user.sql
select * from pgaadauth_create_principal('$AZ_POSTGRESQL_AD_NON_ADMIN_USERNAME', false, false);
EOF
Ezután az alábbi paranccsal futtassa az SQL-szkriptet, és hozza létre a Microsoft Entra nem rendszergazdai felhasználót:
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
Az ideiglenes SQL-szkriptfájl eltávolításához használja a következő parancsot:
rm create_ad_user.sql
Új Java-projekt létrehozása
A kedvenc IDE használatával hozzon létre egy új Java projektet Java 8-at vagy újabb verziót használva. Adjon hozzá egy pom.xml fájlt a gyökérkönyvtárban a következő tartalommal:
<?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>
Ez a fájl egy Apache Maven-fájl , amely a projekt használatát konfigurálja:
- Java 8
- A Legutóbbi PostgreSQL-illesztőprogram Java-hoz
Konfigurációs fájl előkészítése az Azure Database for PostgreSQL-hez való csatlakozáshoz
Hozzon létre egy src/main/resources/application.properties fájlt, és adja hozzá a következő tartalmat:
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
Megjegyzés:
A konfigurációs tulajdonság url magában foglalja ?sslmode=require annak biztosítását, hogy a JDBC-illesztő TLS-t (Transport Layer Security) használjon az adatbázishoz való csatlakozáskor. A TLS használata Azure Database for PostgreSQL rugalmas kiszolgálók esetében kötelező, és ajánlott biztonsági gyakorlat.
SQL-fájl létrehozása az adatbázisséma létrehozásához
Adatbázisséma létrehozásához használjon src/main/resources/schema.sql fájlt. Hozza létre a fájlt, és adja hozzá a következő tartalmat:
DROP TABLE IF EXISTS todo;
CREATE TABLE todo (id SERIAL PRIMARY KEY, description VARCHAR(255), details VARCHAR(4096), done BOOLEAN);
Az alkalmazás kódolása
A következő szakaszok végigvezetik az adatbázishoz csatlakozó Java kód megírásán, adatmodell definiálásán és alapszintű CRUD-műveletek végrehajtásán.
Csatlakozás az adatbázishoz
Ezután adja hozzá a Java kódot, amely JDBC használatával tárolja és kéri le az adatokat a Azure Database for PostgreSQL rugalmas kiszolgálóról.
Hozzon létre egy src/main/java/DemoApplication.java fájlt, és adja hozzá a következő tartalmat:
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();
}
}
Problémái vannak? Értesítsen minket.
Ez a Java kód az application.properties és a korábban létrehozott schema.sql fájlok használatával csatlakozik a Azure Database for PostgreSQL rugalmas kiszolgálóhoz, és létrehoz egy sémát, amely tárolja az adatokat.
Ebben a fájlban az adatok beszúrására, olvasására, frissítésére és törlésére vonatkozó módszerek megjegyzésekkel jelennek meg. A cikk többi része végigvezeti a metódusok kódolásán, és egymás után bonthatja ki őket.
Megjegyzés:
Az adatbázis hitelesítő adatai az application.properties fájl felhasználói és jelszótulajdonságaibanvannak tárolva . A kód ezeket a hitelesítő adatokat használja a DriverManager.getConnection(properties.getProperty("url"), properties);végrehajtás során, mivel a tulajdonságfájl argumentumként lesz átadva.
Most már végrehajthatja ezt a főosztályt a kedvenc eszközével:
- Az IDE használatával kattintson a jobb gombbal a DemoApplication osztályra, és hajtsa végre.
- A Maven használatával futtathatja az alkalmazást a következő végrehajtásával:
mvn exec:java -Dexec.mainClass="com.example.demo.DemoApplication".
Az alkalmazás csatlakozik a Azure Database for PostgreSQL rugalmas kiszolgálóhoz, létrehoz egy adatbázissémát, majd bezárja a kapcsolatot a konzolnaplókban látható módon:
[INFO ] Loading application properties
[INFO ] Connecting to the database
[INFO ] Database connection test: demo
[INFO ] Create database schema
[INFO ] Closing database connection
Tartományosztály létrehozása
Hozzon létre egy új Todo Java osztályt az DemoApplication osztály mellett, és adja hozzá a következő kódot:
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 +
'}';
}
}
Ez az osztály egy tartománymodell, amely a todoschema.sql szkript végrehajtásakor létrehozott táblához van megfeleltetve.
Adatok beszúrása az Azure Database for PostgreSQL-be
Az src/main/java/DemoApplication.java fájlban a fő metódus után adja hozzá a következő metódust az adatok adatbázisba való beszúrásához:
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();
}
Most már eltávolíthatja a kommentárt az alábbi két sorból a main metódusban:
Todo todo = new Todo(1L, "configuration", "congratulations, you have set up JDBC correctly!", true);
insertData(todo, connection);
A főosztály végrehajtásakor a következő kimenetnek kell lennie:
[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
Adatok olvasása az Azure Database for PostgreSQL-ből
A kód helyes működésének ellenőrzéséhez olvassa el a korábban beszúrt adatokat.
Az src/main/java/DemoApplication.java fájlban a insertData metódus után adja hozzá a következő metódust az adatok adatbázisból való beolvasásához:
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;
}
Most már feloldhatja a következő sort a main metódusban:
todo = readData(connection);
A főosztály végrehajtásakor a következő kimenetnek kell lennie:
[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
Adatok frissítése a Azure Database for PostgreSQL
Az adatok frissítéséhez kövesse az alábbi lépéseket.
Még mindig a src/main/java/DemoApplication.java fájlban, a readData metódus után adja hozzá a következő metódust az adatbázisban lévő adatok frissítéséhez:
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);
}
Most már eltávolíthatja a kommentárt az alábbi két sorból a main metódusban:
todo.setDetails("congratulations, you have updated data!");
updateData(todo, connection);
A főosztály végrehajtásakor a következő kimenetnek kell lennie:
[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
Adatok törlése a Azure Database for PostgreSQL
Végül törölje a korábban beszúrt adatokat.
Az src/main/java/DemoApplication.java fájlban, a updateData metódus után adja hozzá a következő metódust az adatbázisban lévő adatok törléséhez:
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);
}
Most már feloldhatja a következő sort a main metódusban:
deleteData(todo, connection);
A főosztály végrehajtásakor a következő kimenetnek kell lennie:
[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
Erőforrások tisztítása
Létrehozott egy Java alkalmazást, amely JDBC használatával tárol és kér le adatokat egy Azure Database for PostgreSQL rugalmas kiszolgálóról.
Az ebben a rövid útmutatóban használt összes erőforrás törléséhez törölje az erőforráscsoportot az alábbi paranccsal:
az group delete \
--name $AZ_RESOURCE_GROUP \
--yes
Kapcsolódó tartalom
- Az Azure Database for PostgreSQL kezelése az Azure Portal használatával
- Rövid útmutató: Adatok csatlakoztatása és lekérdezése a Python használatával az Azure Database for PostgreSQL-ben
- Rövid útmutató: A .NET (C#) használatával csatlakozhat és kérdezhet le adatokat az Azure Database for PostgreSQL-ben
- Rövid útmutató: Adatok csatlakoztatása és lekérdezése a Go nyelv használatával az Azure Database for PostgreSQL-ben
- Rövid útmutató: Adatok csatlakoztatása és lekérdezése a PHP használatával az Azure Database for PostgreSQL-ben
- Rövid útmutató: Csatlakozás és lekérdezés az Azure CLI-vel az Azure Database for PostgreSQL-lel
- Rövid útmutató: Adatok importálása az Azure Database for PostgreSQL-ből a Power BI-ban