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 egy mintaalkalmazást, amely Java és JDBC használatával tárolja és kéri le az adatokat az Azure Database for PostgreSQL-ben.
A JDBC a hagyományos relációs adatbázisokhoz való csatlakozás szabványos Java API-ja.
Ebben a cikkben két hitelesítési módszert fogunk tartalmazni: a Microsoft Entra-hitelesítést és a 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éssel 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, ezeket a hitelesítő adatokat a rendszer a user táblában tárolja. 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. Az Azure Cloud Shell használatát javasoljuk, mert így automatikusan bejelentkezhet, és minden szükséges eszközt elérhet.
- 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>: A rugalmas Azure Database for PostgreSQL-kiszolgálópéldány neve, amelynek egyedinek kell lennie az Azure-ban. -
<YOUR_DATABASE_NAME>: A rugalmas Azure Database for PostgreSQL-kiszolgálópéldány adatbázisneve, amelynek egyedinek kell lennie az Azure-ban. -
<YOUR_AZURE_REGION>: A használni kívánt Azure-régió. Használhatja az alapértelmezetteastusértéket, de ajánlott az Ön lakóhelyéhez közelebbi régiót konfigurálni. Az elérhető régiók teljes listáját a beírássalaz account list-locationstekintheti meg. -
<YOUR_POSTGRESQL_AD_NON_ADMIN_USERNAME>: Az Azure Database for PostgreSQL rugalmas kiszolgálópéldányának felhasználóneve. Győződjön meg arról, hogy a felhasználónév érvényes felhasználó a Microsoft Entra-bérlőben. -
<YOUR_LOCAL_IP_ADDRESS>: A helyi számítógép IP-címe, amelyről a Spring Boot-alkalmazást fogja futtatni. Az egyik kényelmes módja annak, hogy megtalálja, hogy nyissa meg whatismyip.akamai.com.
Fontos
A beállításkor <YOUR_POSTGRESQL_AD_NON_ADMIN_USERNAME> a felhasználónévnek már léteznie kell a Microsoft Entra-bérlőben, ellenkező esetben nem tud Microsoft Entra-felhasználót létrehozni 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ópéldány 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ópéldány létrehozása
az adminisztrátori felhasználó beállítása
Elsőként egy rugalmas Azure Database for PostgreSQL-kiszolgálópéldányt hoz létre.
Feljegyzés
Az Azure Portalon részletes információt talál arról, hogyan hozhat létre egy rugalmas Azure Database for PostgreSQL kiszolgálópéldányt.
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 a rugalmas Azure Database for PostgreSQL-kiszolgálópéldány Azure-adatbázisához hozzáad egy teljes rendszergazdai jogosultságokkal rendelkező új felhasználót. Rugalmas Azure Database for PostgreSQL-kiszolgálópéldányonké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
A rugalmas Azure Database for PostgreSQL-kiszolgálópéldányok alapértelmezés szerint védettek. Tűzfallal rendelkezik, amely semmilyen bejövő kapcsolatot sem engedélyez. Az adatbázis használatához hozzá kell adnia egy tűzfalszabályt, amely lehetővé teszi, hogy a helyi IP-cím hozzáférjen 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 rugalmas Azure Database for PostgreSQL-kiszolgálópéldányhoz csatlakozik Linuxos Windows-alrendszer (WSL) egy Windows-számítógépen, hozzá kell adnia a WSL-gazdagép azonosítóját a tűzfalhoz.
Szerezze be a host gép IP-címét a következő parancs futtatásával WSL-ben:
cat /etc/resolv.conf
Másolja ki az IP-címet a kifejezés nameserverután, 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.
Feljegyzés
Az Azure Database for PostgreSQL-felhasználók kezelésével kapcsolatos részletesebb információkat a Microsoft Entra-szerepkörök kezelése az Azure Database for PostgreSQL-ben című témakörben talál.
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 a Microsoft Entra nem rendszergazdai felhasználójának létrehozásához:
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
Most az alábbi paranccsal távolítsa el az ideiglenes SQL-szkriptfájlt:
rm create_ad_user.sql
Új Java-projekt létrehozása
A kedvenc IDE használatával hozzon létre egy új Java-projektet a Java 8 vagy újabb verziójával, és vegyen fel egy pom.xml fájlt a gyökérkönyvtárába 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 , amely konfigurálja a projekt használatát:
- 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, majd 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
Feljegyzé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 kötelező az Azure Database for PostgreSQL rugalmas kiszolgálópéldányai esetében, é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 src /main/resources/schema.sql fájlt fog használni. Hozza létre a fájlt a következő tartalommal:
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
Csatlakozás az adatbázishoz
Ezután adja hozzá a JDBC-t használó Java-kódot az adatok tárolásához és lekéréséhez a rugalmas Azure Database for PostgreSQL-kiszolgálópéldánybó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 a korábban létrehozott application.properties és schema.sql fájlokat fogja használni, hogy csatlakozzon a rugalmas Azure Database for PostgreSQL-kiszolgálópéldányhoz, és hozzon létre egy sémát, amely tárolja az adatokat.
Ebben a fájlban láthatja, hogy megjegyzéseket fűztünk az adatok beszúrásához, olvasásához, frissítéséhez és törléséhez: ezeket a metódusokat a cikk többi részében kódolva lesznek, és egymás után feloldhatja őket.
Feljegyzés
Az adatbázis hitelesítő adatai az application.properties fájl felhasználói és jelszótulajdonságaibanvannak tárolva . Ezeket a hitelesítő adatokat a rendszer a végrehajtás DriverManager.getConnection(properties.getProperty("url"), properties);során használja, 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 futtassa azt.
- 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ásnak csatlakoznia kell a rugalmas Azure Database for PostgreSQL-kiszolgálópéldányhoz, létre kell hoznia egy adatbázissémát, majd be kell zárnia a kapcsolatot, ahogy a konzolnaplókban látnia kell:
[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 todo táblázatra van leképezve, amit a schema.sql szkript végrehajtásakor hoztál létre.
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ásának most a következő kimenetet kell eredményeznie:
[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
Olvassuk el a korábban beszúrt adatokat annak ellenőrzéséhez, hogy a kód megfelelően működik-e.
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ásának most a következő kimenetet kell eredményeznie:
[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 az Azure Database for PostgreSQL-ben
Frissítsük a korábban beszúrt adatokat.
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ásának most a következő kimenetet kell eredményeznie:
[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 az Azure Database for PostgreSQL-ben
Végül töröljük 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ásának most a következő kimenetet kell eredményeznie:
[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
Az erőforrások tisztítása
Gratulálunk! Létrehozott egy Java-alkalmazást, amely JDBC használatával tárol és kér le adatokat egy rugalmas Azure Database for PostgreSQL-kiszolgálópéldányból.
A rövid útmutató során 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 lekérdezhet adatokat egy Azure Database for PostgreSQL-ből.
- Rövid útmutató: A Go nyelv használatával csatlakozhat és lekérdezhet adatokat egy Azure Database for PostgreSQL-ből.
- Rövid útmutató: A PHP használatával csatlakozhat és lekérdezhet adatokat egy Azure Database for PostgreSQL-ből.
- Rövid útmutató: Az Azure CLI használatával csatlakozhat és lekérdezhet adatokat egy Azure Database for PostgreSQL-ből.
- Rövid útmutató: Adatok importálása az Azure Database for PostgreSQL-ből a Power BI-ban.