Menggunakan Spring Data JDBC dengan Azure SQL Database

Tutorial ini menunjukkan cara menyimpan data di Azure SQL Database menggunakan Spring Data JDBC.

JDBC adalah Java API standar untuk terhubung ke database hubungan tradisional.

Dalam tutorial ini, kami menyertakan dua metode autentikasi: autentikasi Microsoft Entra dan autentikasi SQL Database. Tab Tanpa Kata Sandi memperlihatkan autentikasi Microsoft Entra dan tab Kata Sandi memperlihatkan autentikasi SQL Database.

Autentikasi Microsoft Entra adalah mekanisme untuk menyambungkan ke Azure Database for SQL Database 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 SQL Database menggunakan akun yang disimpan di SQL Database. Jika Anda memilih untuk menggunakan kata sandi sebagai kredensial untuk akun, kredensial ini akan disimpan dalam tabel pengguna. Karena kata sandi ini disimpan di SQL Database, Anda perlu mengelola rotasi kata sandi sendiri.

Prasyarat

  • Utilitas sqlcmd.

  • Driver ODBC 17 atau 18.

  • Jika Anda tidak memilikinya, buat instans Azure SQL Server bernama sqlservertest dan database bernama demo. Untuk petunjuknya, lihat Mulai Cepat: Membuat database tunggal - Azure SQL Database.

  • 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 MS SQL Server Driver , lalu pilih Java versi 8 atau yang lebih tinggi.

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-jdbc-sql-server.

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 dapat menggunakan database Anda, buka firewall server untuk mengizinkan alamat IP lokal mengakses server database. Untuk informasi selengkapnya, lihat Tutorial: Mengamankan database di Azure SQL Database.

Jika Anda menyambungkan ke server Azure SQL Database dari Subsistem Windows untuk Linux (WSL) di komputer Windows, Anda perlu menambahkan ID host WSL ke firewall Anda.

Membuat pengguna non-admin database SQL dan memberikan izin

Langkah ini akan membuat pengguna non-admin dan memberikan semua izin pada database ke demo dalamnya.

Untuk menggunakan koneksi tanpa kata sandi, lihat Tutorial: Mengamankan database di Azure SQL Database atau menggunakan Service Koneksi or untuk membuat pengguna admin Microsoft Entra untuk server Azure SQL Database Anda, seperti yang diperlihatkan dalam langkah-langkah berikut:

  1. Pertama, instal ekstensi Service Koneksi or tanpa kata sandi untuk Azure CLI:

    az extension add --name serviceconnector-passwordless --upgrade
    
  2. Kemudian, gunakan perintah berikut untuk membuat pengguna non-admin Microsoft Entra:

    az connection create sql \
        --resource-group <your-resource-group-name> \
        --connection sql_conn \
        --target-resource-group <your-resource-group-name> \
        --server sqlservertest \
        --database demo \
        --user-account \
        --query authInfo.userName \
        --output tsv
    

Admin Microsoft Entra yang Anda buat adalah pengguna admin database SQL, sehingga Anda tidak perlu membuat pengguna baru.

Penting

Koneksi tanpa kata sandi database Azure SQL memerlukan peningkatan Driver MS SQL Server ke versi atau yang 12.1.0 lebih tinggi. Opsi koneksi dalam authentication=DefaultAzureCredential versi 12.1.0 dan authentication=ActiveDirectoryDefault dalam versi 12.2.0.

Menyimpan data dari Azure SQL Database

Dengan instans Azure SQL Database, Anda dapat menyimpan data dengan menggunakan Spring Cloud Azure.

Untuk menginstal modul Spring Cloud Azure Starter, tambahkan dependensi berikut ke file pom.xml Anda:

  • Spring Cloud Azure Bill of Materials (BOM):

    <dependencyManagement>
      <dependencies>
        <dependency>
          <groupId>com.azure.spring</groupId>
          <artifactId>spring-cloud-azure-dependencies</artifactId>
          <version>5.12.0</version>
          <type>pom</type>
          <scope>import</scope>
        </dependency>
      </dependencies>
    </dependencyManagement>
    

    Catatan

    Jika Anda menggunakan Spring Boot 2.x, pastikan untuk mengatur versi ke spring-cloud-azure-dependencies4.18.0. Bill of Material (BOM) ini harus dikonfigurasi di bagian <dependencyManagement> file pom.xml 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:

    <dependency>
      <groupId>com.azure.spring</groupId>
      <artifactId>spring-cloud-azure-starter</artifactId>
    </dependency>
    

    Catatan

    Karena ini adalah dependensi, itu harus ditambahkan di bagian <dependencies>pom.xml. Versinya tidak dikonfigurasi di sini, karena dikelola oleh BOM yang kami tambahkan sebelumnya.

Mengonfigurasi Spring Boot untuk menggunakan Azure SQL Database

Untuk menyimpan data dari Azure SQL Database menggunakan Spring Data JDBC, ikuti langkah-langkah berikut untuk mengonfigurasi aplikasi:

  1. Konfigurasikan kredensial Azure SQL Database dalam file konfigurasi application.properties .

    logging.level.org.springframework.jdbc.core=DEBUG
    
    spring.datasource.url=jdbc:sqlserver://sqlservertest.database.windows.net:1433;databaseName=demo;authentication=DefaultAzureCredential;
    
    spring.sql.init.mode=always
    

    Peringatan

    Properti spring.sql.init.mode=always konfigurasi berarti bahwa Spring Boot akan secara otomatis menghasilkan skema database, menggunakan file schema.sql yang akan Anda buat berikutnya, setiap kali server dimulai. Ini bagus untuk pengujian, tetapi ingat bahwa ini akan menghapus data Anda setiap kali menghidupkan ulang, jadi sebaiknya Anda tidak menggunakannya dalam produksi.

  1. Buat file konfigurasi src/main/resources/schema.sql untuk mengonfigurasi skema database, lalu tambahkan konten berikut.

    DROP TABLE IF EXISTS todo;
    CREATE TABLE todo (id INT IDENTITY PRIMARY KEY, description VARCHAR(255), details VARCHAR(4096), done BIT);
    
  1. Buat kelas Java baru Todo . Kelas ini adalah model domain yang dipetakan ke todo tabel yang akan dibuat secara otomatis oleh Spring Boot. Kode berikut mengabaikan getters metode dan setters .

    import org.springframework.data.annotation.Id;
    
    public class Todo {
    
        public Todo() {
        }
    
        public Todo(String description, String details, boolean done) {
            this.description = description;
            this.details = details;
            this.done = done;
        }
    
        @Id
        private Long id;
    
        private String description;
    
        private String details;
    
        private boolean done;
    
    }
    
  2. 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.repository.CrudRepository;
    
    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)).toList())
                .forEach(System.out::println);
        }
    
    }
    
    interface TodoRepository extends CrudRepository<Todo, Long> {
    
    }
    

    Tip

    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.

    DefaultAzureCredential mendukung 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?

  3. Mulai aplikasi. Aplikasi menyimpan data ke dalam database. Anda akan melihat log yang mirip dengan contoh berikut:

    2023-02-01 10:22:36.701 DEBUG 7948 --- [main] o.s.jdbc.core.JdbcTemplate : Executing prepared SQL statement [INSERT INTO todo (description, details, done) VALUES (?, ?, ?)]    
    com.example.demo.Todo@4bdb04c8
    

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.

Langkah berikutnya