Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Tutorial ini menunjukkan cara menyimpan data di Azure Database for PostgreSQL menggunakan Spring Data JPA.
Java Persistence API (JPA) adalah API Java standar untuk pemetaan objek-relasional.
Dalam tutorial ini, kami menyertakan dua metode autentikasi: autentikasi Microsoft Entra dan autentikasi PostgreSQL. Tab Tanpa Kata Sandi memperlihatkan autentikasi Microsoft Entra dan tab Kata Sandi memperlihatkan autentikasi PostgreSQL.
Autentikasi Microsoft Entra adalah mekanisme untuk menyambungkan ke Azure Database for PostgreSQL menggunakan identitas yang ditentukan dalam ID Microsoft Entra. Dengan autentikasi Microsoft Entra, Anda dapat mengelola identitas pengguna database dan layanan Microsoft lain di lokasi pusat, yang menyederhanakan manajemen izin.
Autentikasi PostgreSQL menggunakan akun yang disimpan di PostgreSQL. Jika Anda memilih untuk menggunakan kata sandi sebagai kredensial untuk akun, kredensial ini akan disimpan dalam user tabel. Karena kata sandi ini disimpan di PostgreSQL, Anda perlu mengelola rotasi kata sandi sendiri.
Prasyarat
Langganan Azure - buat satu secara gratis.
Java Development Kit (JDK), versi 8 atau yang lebih tinggi.
Jika Anda tidak memiliki aplikasi Spring Boot, buat proyek Maven dengan Spring Initializr. Pastikan untuk memilih Proyek Maven dan, di bawah Dependensi, tambahkan dependensi Spring Web, Spring Data JDBC, dan PostgreSQL Driver , lalu pilih Java versi 8 atau yang lebih tinggi.
- Jika Anda tidak memilikinya, buat instans Azure Database for PostgreSQL Flexible Server bernama
postgresqlflexibletestdan database bernamademo. Untuk petunjuknya, lihat Mulai Cepat: Membuat Azure Database for PostgreSQL - Server Fleksibel di portal Azure.
Penting
Untuk menggunakan koneksi tanpa kata sandi, konfigurasikan pengguna admin Microsoft Entra untuk instans Server Fleksibel Azure Database for PostgreSQL Anda. Untuk informasi selengkapnya, lihat Mengelola peran Microsoft Entra di Azure Database for PostgreSQL - Server Fleksibel.
Lihat aplikasi sampel
Dalam tutorial ini, Anda akan membuat kode aplikasi sampel. Jika Anda ingin lebih cepat, aplikasi ini sudah dikodekan dan tersedia di https://github.com/Azure-Samples/quickstart-spring-data-jpa-postgresql.
Mengonfigurasi aturan firewall untuk server PostgreSQL Anda
Instans Azure Database for PostgreSQL diamankan secara default. Mereka memiliki firewall yang tidak mengizinkan koneksi masuk.
Agar dapat menggunakan database Anda, buka firewall server untuk mengizinkan alamat IP lokal mengakses server database. Untuk informasi selengkapnya, lihat Aturan firewall di Azure Database for PostgreSQL - Server Fleksibel.
Jika Anda menyambungkan ke server PostgreSQL dari Subsistem Windows untuk Linux (WSL) di komputer Windows, Anda perlu menambahkan ID host WSL ke firewall Anda.
Membuat pengguna non-admin PostgreSQL dan memberikan izin
Selanjutnya, buat pengguna non-admin dan berikan semua izin ke database.
Anda dapat menggunakan metode berikut untuk membuat pengguna non-admin yang menggunakan koneksi tanpa kata sandi.
Gunakan perintah berikut untuk menginstal ekstensi tanpa kata sandi Konektor Layanan untuk Azure CLI.
az extension add --name serviceconnector-passwordless --upgradeGunakan perintah berikut untuk membuat pengguna non-admin Microsoft Entra:
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 tsvSetelah perintah selesai, perhatikan nama pengguna di output konsol.
Menyimpan data dari Azure Database for PostgreSQL
Sekarang setelah Anda memiliki instans Server Fleksibel Azure Database for PostgreSQL, Anda dapat menyimpan data dengan menggunakan Spring Cloud Azure.
Untuk menginstal modul Spring Cloud Azure Starter JDBC PostgreSQL, tambahkan dependensi berikut ke file pom.xml Anda:
Spring Cloud Azure Daftar Material (BOM):
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>6.0.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>Catatan
Jika Anda menggunakan Spring Boot 3.0.x-3.4.x, pastikan untuk mengatur versi ke
spring-cloud-azure-dependencies5.23.0.Jika Anda menggunakan Spring Boot 2.x, pastikan untuk mengatur versi ke
spring-cloud-azure-dependencies4.20.0.Bill of Material (BOM) ini harus dikonfigurasi di bagian
<dependencyManagement>pom.xml file Anda. Ini memastikan bahwa semua dependensi Spring Cloud Azure menggunakan versi yang sama.Untuk informasi selengkapnya tentang versi yang digunakan untuk BOM ini, lihat Versi Spring Cloud Azure mana yang Harus Saya Gunakan.
Artefak Spring Cloud Azure Starter JDBC untuk PostgreSQL:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-jdbc-postgresql</artifactId> </dependency>
Catatan
Koneksi tanpa kata sandi telah didukung sejak versi 4.5.0.
Konfigurasikan Spring Boot untuk menggunakan Azure Database for PostgreSQL
Untuk menyimpan data dari Azure Database for PostgreSQL menggunakan Spring Data JPA, ikuti langkah-langkah berikut untuk mengonfigurasi aplikasi:
Konfigurasikan kredensial Azure Database for PostgreSQL dengan menambahkan properti berikut ke file konfigurasi application.properties Anda.
logging.level.org.hibernate.SQL=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.jpa.hibernate.ddl-auto=create-drop spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
- Jika Anda tidak memilikinya, buat instans Server Tunggal Azure Database for PostgreSQL bernama
postgresqlsingletestdan database bernamademo. Untuk petunjuknya, lihat Mulai Cepat: Membuat server Azure Database for PostgreSQL dengan menggunakan portal Azure.
Penting
Untuk menggunakan koneksi tanpa kata sandi, konfigurasikan pengguna admin Microsoft Entra untuk instans Server Tunggal Azure Database for PostgreSQL Anda. Untuk informasi selengkapnya, lihat Menggunakan ID Microsoft Entra untuk autentikasi dengan PostgreSQL.
Lihat aplikasi sampel
Dalam artikel ini, Anda akan membuat kode aplikasi sampel. Jika Anda ingin lebih cepat, aplikasi ini sudah dikodekan dan tersedia di https://github.com/Azure-Samples/quickstart-spring-data-jpa-postgresql.
Mengonfigurasi aturan firewall untuk server PostgreSQL Anda
Instans Azure Database for PostgreSQL diamankan secara default. Mereka memiliki firewall yang tidak mengizinkan koneksi masuk.
Agar dapat menggunakan database Anda, buka firewall server untuk mengizinkan alamat IP lokal mengakses server database. Untuk informasi selengkapnya, lihat Membuat dan mengelola aturan firewall untuk Azure Database for PostgreSQL - Server Tunggal menggunakan portal Azure.
Jika Anda menyambungkan ke server PostgreSQL dari Subsistem Windows untuk Linux (WSL) di komputer Windows, Anda perlu menambahkan ID host WSL ke firewall Anda.
Membuat pengguna non-admin PostgreSQL dan memberikan izin
Selanjutnya, buat pengguna non-admin dan berikan semua izin ke database.
Anda dapat menggunakan metode berikut untuk membuat pengguna non-admin yang menggunakan koneksi tanpa kata sandi.
Gunakan perintah berikut untuk menginstal ekstensi tanpa kata sandi Konektor Layanan untuk Azure CLI.
az extension add --name serviceconnector-passwordless --upgradeGunakan perintah berikut untuk membuat pengguna non-admin Microsoft Entra:
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 tsvSetelah perintah selesai, perhatikan nama pengguna di output konsol.
Menyimpan data dari Azure Database for PostgreSQL
Sekarang setelah Anda memiliki instans server Tunggal Azure Database for PostgreSQL, Anda dapat menyimpan data dengan menggunakan Spring Cloud Azure.
Untuk menginstal modul Spring Cloud Azure Starter JDBC PostgreSQL, tambahkan dependensi berikut ke file pom.xml Anda:
Spring Cloud Azure Daftar Material (BOM):
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>6.0.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>Catatan
Jika Anda menggunakan Spring Boot 3.0.x-3.4.x, pastikan untuk mengatur versi ke
spring-cloud-azure-dependencies5.23.0.Jika Anda menggunakan Spring Boot 2.x, pastikan untuk mengatur versi ke
spring-cloud-azure-dependencies4.20.0.Bill of Material (BOM) ini harus dikonfigurasi di bagian
<dependencyManagement>pom.xml file Anda. Ini memastikan bahwa semua dependensi Spring Cloud Azure menggunakan versi yang sama.Untuk informasi selengkapnya tentang versi yang digunakan untuk BOM ini, lihat Versi Spring Cloud Azure mana yang Harus Saya Gunakan.
Artefak Spring Cloud Azure Starter JDBC untuk PostgreSQL:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-jdbc-postgresql</artifactId> </dependency>
Catatan
Koneksi tanpa kata sandi telah didukung sejak versi 4.5.0.
Konfigurasikan Spring Boot untuk menggunakan Azure Database for PostgreSQL
Untuk menyimpan data dari Azure Database for PostgreSQL menggunakan Spring Data JPA, ikuti langkah-langkah berikut untuk mengonfigurasi aplikasi:
Konfigurasikan kredensial Azure Database for PostgreSQL dengan menambahkan properti berikut ke file konfigurasi application.properties Anda.
logging.level.org.hibernate.SQL=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.jpa.hibernate.ddl-auto=create-drop spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
Buat kelas Java baru
Todo. Kelas ini adalah model domain yang dipetakan ketodotabel yang akan dibuat secara otomatis oleh JPA. Kode berikut mengabaikangettersmetode dansetters.package com.example.demo; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; @Entity public class Todo { public Todo() { } public Todo(String description, String details, boolean done) { this.description = description; this.details = details; this.done = done; } @Id @GeneratedValue private Long id; private String description; private String details; private boolean done; }Edit file kelas startup untuk menampilkan konten berikut.
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.jpa.repository.JpaRepository; import java.util.stream.Collectors; 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)).collect(Collectors.toList())) .forEach(System.out::println); } } interface TodoRepository extends JpaRepository<Todo, Long> { }Tips
Dalam tutorial ini, tidak ada operasi autentikasi dalam konfigurasi atau kode. Namun, menyambungkan ke layanan Azure memerlukan autentikasi. Untuk menyelesaikan autentikasi, Anda perlu menggunakan Azure Identity. Spring Cloud Azure menggunakan
DefaultAzureCredential, yang disediakan pustaka Azure Identity untuk membantu Anda mendapatkan kredensial tanpa perubahan kode apa pun.DefaultAzureCredentialmendukung beberapa metode autentikasi dan menentukan metode mana yang akan digunakan saat runtime. Pendekatan ini memungkinkan aplikasi Anda menggunakan metode autentikasi yang berbeda di lingkungan yang berbeda (seperti lingkungan lokal dan produksi) tanpa menerapkan kode khusus lingkungan. Untuk informasi selengkapnya, lihat DefaultAzureCredential.Untuk menyelesaikan autentikasi di lingkungan pengembangan lokal, Anda dapat menggunakan Azure CLI, Visual Studio Code, PowerShell, atau metode lainnya. Untuk informasi selengkapnya, lihat Autentikasi Azure di lingkungan pengembangan Java. Untuk menyelesaikan autentikasi di lingkungan hosting Azure, sebaiknya gunakan identitas terkelola yang ditetapkan pengguna. Untuk informasi selengkapnya, lihat Apa yang dimaksud dengan identitas terkelola untuk sumber daya Azure?
Mulai aplikasi. Anda akan melihat log yang mirip dengan contoh berikut:
2023-02-01 10:29:19.763 DEBUG 4392 --- [main] org.hibernate.SQL : insert into todo (description, details, done, id) values (?, ?, ?, ?) com.example.demo.Todo@1f
Sebarkan ke Azure Spring Apps
Sekarang setelah Anda memiliki aplikasi Spring Boot yang berjalan secara lokal, saatnya untuk memindahkannya ke produksi. Azure Spring Apps memudahkan penyebaran aplikasi Spring Boot ke Azure tanpa perubahan kode apa pun. Layanan ini mengelola infrastruktur aplikasi Spring sehingga pengembang dapat fokus pada kode mereka. Azure Spring Apps menyediakan manajemen siklus hidup menggunakan pemantauan dan diagnostik yang komprehensif, manajemen konfigurasi, penemuan layanan, integrasi CI/CD, penyebaran biru-hijau, dan banyak lagi. Untuk menyebarkan aplikasi Anda ke Azure Spring Apps, lihat Menyebarkan aplikasi pertama Anda ke Azure Spring Apps.