Menggunakan Spring Data JPA dengan Azure SQL Database
Artikel ini menunjukkan pembuatan aplikasi sampel yang menggunakan Spring Data JPA untuk menyimpan dan mengambil informasi di Azure SQL Database.
Java Persistence API (JPA) adalah API Java standar untuk pemetaan relasional objek.
Prasyarat
- Akun Azure. Jika Anda tidak memilikinya, dapatkan uji coba gratis.
- Azure Cloud Shell atau CLI Azure. Kami merekomendasikan Azure Cloud Shell sehingga Anda akan masuk secara otomatis dan memiliki akses ke semua alat yang Anda butuhkan.
- Kit Pengembangan Java, yang didukung versi 8 (disertakan dalam Azure Cloud Shell).
- cURL atau utilitas HTTP serupa untuk menguji fungsionalitas.
Aplikasi sampel
Pada artikel ini, kami akan mengodekan aplikasi sampel. Jika Anda ingin lebih cepat, aplikasi ini sudah dikodekan dan tersedia di https://github.com/Azure-Samples/quickstart-spring-data-jpa-sql-server.
Menyiapkan lingkungan kerja
Pertama-tama, siapkan beberapa variabel lingkungan dengan menggunakan perintah berikut:
AZ_RESOURCE_GROUP=database-workshop
AZ_DATABASE_NAME=<YOUR_DATABASE_NAME>
AZ_LOCATION=<YOUR_AZURE_REGION>
AZ_SQL_SERVER_USERNAME=spring
AZ_SQL_SERVER_PASSWORD=<YOUR_AZURE_SQL_PASSWORD>
AZ_LOCAL_IP_ADDRESS=<YOUR_LOCAL_IP_ADDRESS>
Ganti tempat penampung dengan nilai berikut, yang digunakan di seluruh artikel ini:
<YOUR_DATABASE_NAME>: Nama server Azure SQL Database Anda. Ini harus unik di seluruh Azure.<YOUR_AZURE_REGION>: Wilayah Azure yang akan Anda gunakan. Anda dapat menggunakaneastussecara default, tetapi kami menyarankan agar Anda mengonfigurasi wilayah yang lebih dekat ke tempat tinggal Anda. Anda dapat memiliki daftar lengkap wilayah yang tersedia dengan memasukkanaz account list-locations.<AZ_SQL_SERVER_PASSWORD>:Kata sandi server Azure SQL Database Anda. Kata sandi itu harus memiliki minimal delapan karakter. Kata sandi Anda harus berisi karakter dari tiga kategori berikut – huruf besar Inggris, huruf kecil Inggris, angka (0-9), dan karakter non-alfanumerik (!, $, #,%, dll.).<YOUR_LOCAL_IP_ADDRESS>: Alamat IP komputer lokal tempat Anda akan menjalankan aplikasi Spring Boot Anda. Salah satu cara mudah untuk menemukannya adalah dengan mengarahkan browser Anda ke whatismyip.akamai.com.
Berikutnya, buat grup sumber daya menggunakan perintah berikut:
az group create \
--name $AZ_RESOURCE_GROUP \
--location $AZ_LOCATION \
| jq
Catatan
Kami menggunakan utilitas jq untuk menampilkan data JSON dan membuatnya lebih mudah dibaca. Utilitas ini dipasang secara default di Azure Cloud Shell. Jika Anda tidak menyukai utilitas itu, Anda dapat dengan aman menghapus | jq bagian dari semua perintah yang akan kami gunakan.
Membuat contoh Azure SQL Database
Hal pertama yang akan kami buat adalah server Azure SQL Database terkelola.
Catatan
Anda bisa membaca informasi selengkapnya tentang membuat server Azure SQL Database di Mulai cepat: Membuat database tunggal Azure SQL Database.
Di Azure Cloud Shell, jalankan perintah berikut ini:
az sql server create \
--resource-group $AZ_RESOURCE_GROUP \
--name $AZ_DATABASE_NAME \
--location $AZ_LOCATION \
--admin-user $AZ_SQL_SERVER_USERNAME \
--admin-password $AZ_SQL_SERVER_PASSWORD \
| jq
Perintah ini membuat server Azure SQL Database.
Mengonfigurasi aturan firewall untuk server Azure SQL Database Anda
Instans Azure SQL Database diamankan secara default. Mereka memiliki firewall yang tidak mengizinkan koneksi masuk. Agar bisa menggunakan database Anda, Anda perlu menambahkan aturan firewall yang akan memungkinkan alamat IP lokal mengakses server database.
Karena Anda mengonfigurasi alamat IP lokal kami di awal artikel ini, Anda dapat membuka firewall server dengan menjalankan perintah berikut:
az sql server firewall-rule create \
--resource-group $AZ_RESOURCE_GROUP \
--name $AZ_DATABASE_NAME-database-allow-local-ip \
--server $AZ_DATABASE_NAME \
--start-ip-address $AZ_LOCAL_IP_ADDRESS \
--end-ip-address $AZ_LOCAL_IP_ADDRESS \
| jq
Mengonfigurasi Azure SQL Database
Server Azure SQL Database yang Anda buat sebelumnya kosong. Server tersebut didak memiliki database apa pun yang dapat Anda gunakan dengan aplikasi Spring Boot. Buat database baru yang dipanggil demo dengan menjalankan perintah berikut ini:
az sql db create \
--resource-group $AZ_RESOURCE_GROUP \
--name demo \
--server $AZ_DATABASE_NAME \
| jq
Hasilkan aplikasi dengan menggunakan Spring Initializr
Buat aplikasi pada baris perintah dengan memasukkan:
curl https://start.spring.io/starter.tgz -d dependencies=web,data-jpa,sqlserver -d baseDir=azure-database-workshop -d bootVersion=2.3.1.RELEASE -d javaVersion=8 | tar -xzvf -
Mengonfigurasikan Spring Boot untuk menggunakan Azure SQL Database
Buka file src/main/resources/application.properties dan tambahkan berikut ini. Pastikan untuk mengganti dua variabel $AZ_DATABASE_NAME dan variabel $AZ_SQL_SERVER_PASSWORD dengan nilai yang Anda konfigurasikan di awal artikel ini.
logging.level.org.hibernate.SQL=DEBUG
spring.datasource.url=jdbc:sqlserver://$AZ_DATABASE_NAME.database.windows.net:1433;database=demo;encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30;
spring.datasource.username=spring@$AZ_DATABASE_NAME
spring.datasource.password=$AZ_SQL_SERVER_PASSWORD
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=create-drop
Peringatan
Properti konfigurasi spring.jpa.hibernate.ddl-auto=create-drop berarti bahwa Spring Boot akan secara otomatis membuat skema database pada permulaan aplikasi dan akan mencoba menghapusnya saat dimatikan. Ini bagus untuk pengujian, tetapi ini seharusnya tidak digunakan dalam produksi!
Sekarang Anda dapat memulai aplikasi Anda dengan menggunakan wrapper Maven yang disediakan:
./mvnw spring-boot:run
Berikut adalah cuplikan layar aplikasi yang berjalan untuk pertama kalinya:
Kodekan aplikasi
Selanjutnya, tambahkan kode Java yang akan menggunakan JPA untuk menyimpan dan mengambil data dari Azure SQL Database Anda.
Tambahkan kelas Java Todo baru, di samping kelas DemoApplication, dan tambahkan kode berikut:
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;
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 boolean equals(Object o) {
if (this == o) {
return true;
}
if (!(o instanceof Todo)) {
return false;
}
return id != null && id.equals(((Todo) o).id);
}
@Override
public int hashCode() {
return 31;
}
}
Kelas ini adalah model domain yang dipetakan pada tabel todo, yang akan dibuat secara otomatis oleh JPA.
Untuk mengelola kelas itu, Anda memerlukan repositori. Tentukan TodoRepository antarmuka baru dalam paket yang sama:
package com.example.demo;
import org.springframework.data.jpa.repository.JpaRepository;
public interface TodoRepository extends JpaRepository<Todo, Long> {
}
Repositori ini adalah repositori yang dikelola Spring Data JPA.
Selesaikan aplikasi dengan membuat pengontrol yang dapat menyimpan dan mengambil data. Terapkan kelas TodoController dalam paket yang sama, dan tambahkan kode berikut:
package com.example.demo;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/")
public class TodoController {
private final TodoRepository todoRepository;
public TodoController(TodoRepository todoRepository) {
this.todoRepository = todoRepository;
}
@PostMapping("/")
@ResponseStatus(HttpStatus.CREATED)
public Todo createTodo(@RequestBody Todo todo) {
return todoRepository.save(todo);
}
@GetMapping("/")
public Iterable<Todo> getTodos() {
return todoRepository.findAll();
}
}
Terakhir, hentikan aplikasi lalu mulai lagi menggunakan perintah berikut:
./mvnw spring-boot:run
Menguji aplikasi
Untuk menguji aplikasi, Anda dapat menggunakan cURL.
Pertama, buat item "todo" baru dalam database menggunakan perintah berikut:
curl --header "Content-Type: application/json" \
--request POST \
--data '{"description":"configuration","details":"congratulations, you have set up JPA correctly!","done": "true"}' \
http://127.0.0.1:8080
Perintah ini harus menghasilkan item yang dibuat sebagai berikut:
{"id":1,"description":"configuration","details":"congratulations, you have set up JPA correctly!","done":true}
Selanjutnya, ambil data dengan menggunakan permintaan cURL baru sebagai berikut:
curl http://127.0.0.1:8080
Perintah ini akan menghasilkan daftar item "todo", termasuk item yang telah Anda buat, sebagai berikut:
[{"id":1,"description":"configuration","details":"congratulations, you have set up JPA correctly!","done":true}]
Berikut adalah cuplikan layar permintaan cURL ini:
Selamat! Anda telah membuat aplikasi Spring Boot yang menggunakan JPA untuk menyimpan dan mengambil data dari Azure SQL Database.
Membersihkan sumber daya
Untuk membersihkan semua sumber daya yang digunakan selama mulai cepat ini, hapus grup sumber daya menggunakan perintah berikut:
az group delete \
--name $AZ_RESOURCE_GROUP \
--yes
Langkah berikutnya
Untuk mempelajari selengkapnya tentang Spring dan Azure, lanjutkan ke pusat dokumentasi Spring di Azure.
Sumber Daya Tambahan:
Untuk informasi selengkapnya tentang Spring Data JPA, lihat dokumentasi referensi Spring.
Untuk informasi selengkapnya tentang menggunakan Azure dengan Java, lihat Azure untuk pengembang Java dan Bekerja dengan Azure DevOps dan Java.

