Latihan - Siapkan aplikasi Java Anda menggunakan Maven

Selesai

Pada unit ini, Anda akan membuat aplikasi konsol dasar dengan menggunakan IDE pilihan Anda untuk mengedit kode. Anda dapat memilih untuk menggunakan terminal pilihan Anda untuk menjalankan kodenya.

Membuat sumber daya Azure Cosmos DB

Untuk menyelesaikan lab ini, Microsoft Learn memberikan kotak pasir Azure gratis tempat Anda dapat membuat akun dan sumber daya. Anda akan menyiapkan akun Azure Cosmos DB dalam langganan ini kemudian membuat database dan kontainer.

  1. Masuk ke portal Microsoft Azure dengan menggunakan akun yang sama dengan yang Anda gunakan untuk mengaktifkan kotak pasir.
  2. Dengan menggunakan portal Microsoft Azure, buat akun Azure Cosmos DB dengan nama pilihan Anda. Saat ada peluang untuk memilih grup daya akun, temukan grup sumber daya [Sandbox resource group] dan pilih grup sumber daya tersebut.
  3. Pada akun Azure Cosmos DB Anda, buat database bernama Users.
  4. Dalam database Pengguna, buat kontainer bernama WebCustomers dengan kunci partisi /userId. Sediakan 400 RU/s untuk WebCustomers.

Membuat direktori kerja Anda

  1. Kami menyediakan templat untuk aplikasi Java Anda. Kloning repositori templat ke sistem Anda.

    git clone https://github.com/MicrosoftDocs/mslearn-cosmos-java-sql.git
    
  2. Buka File Explorer Windows dan buka repositori yang sudah dikloning. Masuk ke subdirektori java_lab.

    Penting

    Semua pekerjaan Anda untuk modul ini akan berada di subdirektori java_lab.

  3. Templat tersebut berisi file pom.xml Maven yang sudah menarik dependensi yang diperlukan proyek Anda. Buka dan periksa file ini untuk menemukan dependensi berikut:

    <dependency>
        <groupId>com.azure</groupId>
        <artifactId>azure-cosmos</artifactId>
        <version>LATEST</version>
    </dependency>
    

    Dependensi ini menarik versi terbaru dari Java SDK Azure Cosmos DB. Anda dapat menutup file ini.

  4. Selanjutnya, Anda akan membuat dan menjalankan Halo Dunia. Dengan menggunakan IDE atau terminal Anda, buka proyek ini. Bergantung pada IDE Anda, ada kemungkinan opsi untuk membuka file pom.xml pada subdirektori java sebagai proyek.

    Setelah proyek terbuka, buka src/main/java/com/azure/cosmos/examples/mslearnbasicapp dan buka CosmosApp.java, yang merupakan template untuk aplikasi Java yang akan dikembangkan. Hasilnya akan terlihat seperti ini:

    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    public final class CosmosApp {
    
        /** For application to log INFO and ERROR. */
        private static Logger logger = LoggerFactory.getLogger(CosmosApp.class.getSimpleName());
    
        private CosmosApp() {
            // not called
        }
    
        /**
        * Main.
        * @param args Command line arguments
        */
        public static void main(final String[] args) {
            logger.info("Hello World.");
        }
    }
    

    Sesederhana itu, kode aplikasi tersebut menerapkan "Halo Dunia."

  5. Jika IDE Anda menawarkan alat untuk membangun dan menjalankan aplikasi Maven Anda: Buat dan jalankan aplikasi Anda menggunakan IDE, dan konfirmasikan bahwa aplikasi tersebut mencatat Hello World ke terminal.

  6. Jika Anda akan menggunakan terminal untuk membuat dan menjalankan aplikasi Maven Anda: Gunakan perintah berikut untuk membuat proyek Maven:

    mvn clean package
    

    Kemudian jalankan:

    mvn exec:java -Dexec.mainClass="com.azure.cosmos.examples.mslearnbasicapp.CosmosApp"  
    

    Konfirmasikan bahwa aplikasi tersebut mencatat output berikut ke terminal:

    INFO: Hello World.
    

Menyambungkan aplikasi ke Azure Cosmos DB

  1. Di dalam kelas CosmosApp, buat variabel kelas statik berikut untuk detail koneksi Azure Cosmos DB Anda:

    /** Azure Cosmos DB endpoint URI. */
    private static String endpointUri = "<your-cosmosdb-hostname>";
    
    /** Azure Cosmos DB primary key. */
    private static String primaryKey = "<your-cosmosdb-master-key>";
    
  2. Kembali ke portal Microsoft Azure, buka panel Kunci, dan salin/tempelkan URI titik akhir Azure Cosmos DB dan kunci primer Anda ke dalam definisi variabel sebelumnya.

    Contohnya, jika URI Anda adalah https://cosmosacct.documents.azure.com:443/, penugasan variable baru Anda akan tampak seperti ini: private static String endpointUri = "https://cosmosacct.documents.azure.com:443/";. Jika kunci primer Anda adalah elzirrKCnXlacvh1CRAnQdYVbVLspmYHQyYrhx0PltHi8wn5lHVHFnd1Xm3ad5cn4TUcH4U0MSeHsVykkFPHpQ==, penugasan variabel baru Anda akan tampak seperti ini: private static String primaryKey = "elzirrKCnXlacvh1CRAnQdYVbVLspmYHQyYrhx0PltHi8wn5lHVHFnd1Xm3ad5cn4TUcH4U0MSeHsVykkFPHpQ==";.

Membuat instans CosmosAsyncClient

Sekarang saatnya untuk membuat instans dari CosmosAsyncClient, yang merupakan penggambaran layanan Azure Cosmos DB dari sisi klien. Klien ini digunakan untuk mengonfigurasi dan menjalankan permintaan yang bertentangan dengan layanan.

  1. Pada CosmosApp.java, tambahkan deklarasi variabel statik berikut ke kelas CosmosApp:

    /** Azure Cosmos DB client instance. */
    private static CosmosAsyncClient client;
    
    /** Azure Cosmos DB database instance. */
    private static CosmosAsyncDatabase database;
    
    /** Azure Cosmos DB container instance. */
    private static CosmosAsyncContainer container;
    

    Kemungkinan besar, kelas client, database, dan container belum diimpor ke dalam file Java Anda. Jadi sekarang adalah saat yang tepat untuk melakukannya. Beberapa IDE mungkin memungkinkan Anda untuk mengimpor dependensi secara otomatis berdasarkan kode yang Anda ketikkan, dan hal tersebut dapat bermanfaat sekarang. Secara umum, bersiaplah saat kami memberi blok kode untuk ditempelkan, Anda mungkin perlu menambahkan beberapa pernyataan import agar dapat berfungsi.

  2. Buat metode private void bernama basicOperations tanpa argumen di kelas.

  3. Tambahkan kode berikut untuk membuat instans CosmosAsyncClient dalam metode basicOperations, dan sertakan kode untuk memeriksa jika terdapat database Users.

     client = new CosmosClientBuilder()
         .endpoint(endpointUri)
         .key(primaryKey)
         .consistencyLevel(ConsistencyLevel.EVENTUAL)
         .directMode()
         .contentResponseOnWriteEnabled(true)
         .buildAsyncClient();
    
     database = client.getDatabase("Users");
     container = database.getContainer("WebCustomers");            
    
     logger.info("Database and container validation complete");
    
     client.close();
    
  4. Pada tahap ini, metode basicOperations Anda berisi kode untuk berinteraksi dengan Azure Cosmos DB. Namun, metode ini tidak dipanggil di main, jadi aplikasi kita masih berfungsi untuk mencetak "Halo Dunia." Sebagai tanda centang, buat dan jalankan CosmosApp.java di IDE atau jalankan program di terminal menggunakan:

    mvn clean package
    mvn exec:java -Dexec.mainClass="com.azure.cosmos.examples.mslearnbasicapp.CosmosApp"  
    

    Konfirmasikan bahwa aplikasi tersebut masih mencatat output berikut ke terminal:

    INFO: Hello World.
    
  5. Salin dan tempelkan kode berikut ke dalam metode main, menimpa baris logger.info("Hello World."); saat ini.

    try {
        CosmosApp p = new CosmosApp();
        p.basicOperations();
    } catch (CosmosException e) {
        logger.error("Failed while executing app.", e);
    } finally {
        logger.info("End of demo, press any key to exit.");
    }
    

    Hal ini akan memicu kode Azure Cosmos DB pada aplikasi kami.

  6. Buat dan jalankan CosmosApp.java pada IDE, atau jalankan program di terminal dengan menggunakan:

    mvn clean package
    mvn exec:java -Dexec.mainClass="com.azure.cosmos.examples.mslearnbasicapp.CosmosApp"  
    

    Anda mungkin melihat sejumlah pesan log di terminal, beberapa di antaranya dihasilkan oleh SDK itu sendiri. Baca dengan teliti dan konfirmasikan bahwa aplikasi tersebut mencatat output berikut ke terminal:

    INFO: Database and container validation complete
    

Dalam unit ini, Anda menyiapkan fondasi awal untuk aplikasi Java Azure Cosmos DB Anda. Anda sudah menyiapkan aplikasi Maven Anda, membuat proyek "Halo Dunia" sederhana, dan memperluasnya untuk menghubungkan proyek tersebut ke titik akhir Azure Cosmos DB.

  1. Kami menyediakan templat untuk aplikasi Java Anda. Kloning repositori templat ke dalam sistem Anda

    git clone https://github.com/MicrosoftDocs/mslearn-cosmos-java-sql.git
    
  2. Buka Windows Explorer dan navigasi ke repositori yang dikloning. Masuk ke subdirektori spring_lab.

    Penting

    Semua pekerjaan Anda untuk modul ini akan berada di subdirektori spring_lab.

  3. Templat tersebut berisi pom.xml Maven yang sudah menarik dependensi yang diperlukan proyek Anda. Buka dan periksa file ini untuk menemukan dependensi di bawah ini:

    <dependency>
      <groupId>com.azure</groupId>
      <artifactId>azure-spring-data-cosmos</artifactId>
      <version>LATEST</version>
    </dependency>
    

    Dependensi ini menarik versi terbaru dari Spring Data Azure Cosmos DB. Anda dapat menutup file ini.

Menyambungkan aplikasi ke Azure Cosmos DB

  1. Dengan menggunakan IDE atau terminal Anda, buka proyek ini. Bergantung pada IDE Anda, ada kemungkinan opsi untuk membuka file pom.xml pada subdirektori spring sebagai proyek. Setelah proyek terbuka, buka src/main/resources/ menggunakan alat penjelajah file. Anda akan melihat sebuah file bernama application.properties.rename. Spring Data menekankan file konfigurasi daripada parameter konfigurasi yang dikodekan secara permanen; guna membuat file konfigurasi untuk proyek Spring Data Anda, salin application.properties.rename ke application.properties dan buka file application.properties yang baru. Anda akan melihat

    cosmos.uri=${ACCOUNT_HOST}
    cosmos.key=${ACCOUNT_KEY}
    cosmos.secondaryKey=${SECONDARY_ACCOUNT_KEY}
    
    dynamic.collection.name=spel-property-collection
    # Populate query metrics
    cosmos.queryMetricsEnabled=true
    

    Anda akan mengisi ${ACCOUNT_HOST} dan ${ACCOUNT_KEY}, menggunakan metode pilihan Anda - baik salin-tempelkan nilai ke application.properties, atau menentukan variabel lingkungan ini di dalam IDE Anda. Pada langkah berikutnya, Anda akan menemukan nilai yang seharusnya dimiliki variabel ini.

  2. Kembali ke portal Microsoft Azure, buka panel Kunci, dan salin URI titik akhir Azure Cosmos DB beserta kunci primer. Seperti yang dibahas pada langkah sebelumnya, gunakan metode pilihan Anda untuk menetapkan URI titik akhir Azure Cosmos DB dan kunci primer Anda ke variabel yang disebutkan.

    Misalnya, jika URI Anda adalah https://cosmosacct.documents.azure.com:443/, dan Anda memilih untuk menempelkan titik akhir dan kunci primer ke application.properties, maka baris pada application.properties akan tampak seperti ini: cosmos.uri=https://cosmosacct.documents.azure.com:443/. Jika kunci primer Anda adalah elzirrKCnXlacvh1CRAnQdYVbVLspmYHQyYrhx0PltHi8wn5lHVHFnd1Xm3ad5cn4TUcH4U0MSeHsVykkFPHpQ==, maka dengan mengikuti proses yang sama penugasan variabel baru Anda akan tampak seperti ini: cosmos.key=elzirrKCnXlacvh1CRAnQdYVbVLspmYHQyYrhx0PltHi8wn5lHVHFnd1Xm3ad5cn4TUcH4U0MSeHsVykkFPHpQ==.

Mengonfigurasi klien Azure Cosmos DB

Spring Data Azure Cosmos DB secara otomatis menyediakan klien Azure Cosmos DB saat memulai. Klien Azure Cosmos DB merupakan penggambaran layanan Azure Cosmos DB dari sisi klien, digunakan untuk menjalankan permintaan yang bertentangan dengan layanan. Kode Anda dapat mengonfigurasi klien Azure Cosmos DB sebelum instansnya dibuat, menggunakan set metode pembangun sekaligus properti yang ditarik dari application.properties.

  1. Buka CosmosProperties.java. Kami telah menyediakan file ini dalam formulir yang lengkap, jadi cukup periksa isinya.

    @ConfigurationProperties(prefix = "cosmos")
    public class CosmosProperties {
    
        private String uri;
    
        private String key;
    
        private String secondaryKey;
    
        private boolean queryMetricsEnabled;
    
        public String getUri() {
            return uri;
        }
    
        public void setUri(String uri) {
            this.uri = uri;
        }
    
        public String getKey() {
            return key;
        }
    
        public void setKey(String key) {
            this.key = key;
        }
    
        public String getSecondaryKey() {
            return secondaryKey;
        }
    
        public void setSecondaryKey(String secondaryKey) {
            this.secondaryKey = secondaryKey;
        }
    
        public boolean isQueryMetricsEnabled() {
            return queryMetricsEnabled;
        }
    
        public void setQueryMetricsEnabled(boolean enableQueryMetrics) {
            this.queryMetricsEnabled = enableQueryMetrics;
        }
    }
    

    Amati anggota kelas uri, key, secondaryKey, queryMetricsEnabled. Melihat kembali application.properties, amati bahwa nama anggota CosmosProperties sesuai dengan nama properti application.properties. Kelas CosmosProperties menyajikan getter dan setter untuk seluruh aplikasi Anda guna mengakses pengaturan konfigurasi dari application.properties. Perhatikan bahwa tidak ada kode di sini untuk menarik konfigurasi dari application.properties - Spring Data memahami struktur file ini dan secara otomatis mengatur variabel anggota setelah memilah file konfigurasi.

    Kami akan memanfaatkan penyiapan ini ke depannya, saat kami mengonfigurasi klien Azure Cosmos DB.

  2. Dalam CosmosSampleConfiguration.java, periksa kelas CosmosSampleConfiguration dan temukan metode cosmosClientBuilder yang kosong:

    @Bean
    public CosmosClientBuilder cosmosClientBuilder() {
        return null;
    }
    

    Saat mulai, Spring Data akan secara otomatis memanggil metode ini, mendapatkan CosmosClientBuilder yang dihasilkan metode ini, dan memanggil metode build()-nya - yang pada titik ini (di bawah kap) instans CosmosAsyncClient akan dibuat berdasarkan pengaturan konfigurasi yang terkandung dalam CosmosClientBuilder. Anda dapat menggunakan metode ini untuk mengonfigurasi CosmosClientBuilder menggunakan metode penyusun.

  3. Perhatikan bahwa kami menggunakan injeksi konstruktor (bukan injeksi bidang yang menggunakan @Autowired) untuk membuat instans variabel properties dan mengisi variabel anggotanya dengan nilai yang diuraikan dari file konfigurasi. Ini memastikan semua dependensi yang diperlukan tersedia saat instans kelas ini dibuat, dan memfasilitasi penulisan kode pengujian di masa mendatang.

    //use constructor injection for spring dependencies 
    public CosmosSampleConfiguration(CosmosProperties properties){
        this.properties = properties;
    }
    

    Kami dapat menggunakan properties untuk mendapatkan uri dan kunci untuk akun Azure Cosmos DB kami dan mengimplementasikan cosmosClientBuilder seperti yang ditunjukkan di bawah ini:

    @Bean
    public CosmosClientBuilder cosmosClientBuilder() {
        DirectConnectionConfig directConnectionConfig = DirectConnectionConfig.getDefaultConfig();
        return new CosmosClientBuilder()
            .endpoint(properties.getUri())
            .key(properties.getKey())
            .directMode(directConnectionConfig);
    }
    

    Implementasi ini

    1. Menarik uri dan kunci dari properties
    2. Memasukkannya ke dalam metode penyusun endpoint dan key
    3. Selain itu, mengonfigurasi koneksi jaringan ke layanan Azure Cosmos DB. (Dalam mode langsung aplikasi klien Anda berbicara langsung ke partisi DB Azure Cosmos ujung belakang.)
  4. Kembali ke CosmosSampleConfiguration.java dan temukan metode getDatabaseName:

    @Override
    protected String getDatabaseName() { return ""; }
    

    Ubah nilai pengembalian default menjadi "Users", nama database Anda. Dengan begini, saat Spring Data secara otomatis terhubung ke Azure Cosmos DB saat mulai, itu akan terhubung ke database *Pengguna.

  5. Arahkan ke WebCustomer.java. Anda akan melihat bahwa kelas WebCustomer didahului dengan anotasi @Container:

    @Container(containerName = "", ru = "")
    

    @Container mengambil dua argumen:

    • containerName: Nama kontainer Azure Cosmos DB (WebCustomers)
    • ru: Throughput yang tersedia di kontainer Anda. 400 RU/d adalah default yang baik untuk latihan Microsoft Learn.

    Sesuaikan @Container untuk kasus penggunaan Anda, sebagaimana ditunjukkan:

    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @Container(containerName = "WebCustomers", ru = "400")
    public class WebCustomer {
    
  6. Pada titik ini, proyek Spring Data Anda disiapkan untuk berinteraksi dengan Azure Cosmos DB. Selanjutnya, Anda akan membuat dan menjalankan Halo Dunia. Buka src/main/java/com/azure/cosmos/examples/springexamples dan buka CosmosSample.java, yang merupakan template untuk aplikasi Spring Data yang akan dikembangkan. Hasilnya akan terlihat seperti ini:

    // Copyright (c) Microsoft Corporation. All rights reserved.
    // Licensed under the MIT License.
    package com.azure.cosmos.examples.springexamples;
    
    import com.azure.cosmos.CosmosException;
    import com.azure.cosmos.examples.springexamples.common.CouponsUsed;
    import com.azure.cosmos.examples.springexamples.common.OrderHistory;
    import com.azure.cosmos.examples.springexamples.common.ShippingPreference;
    import com.azure.cosmos.models.CosmosItemResponse;
    import com.azure.cosmos.models.PartitionKey;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.boot.CommandLineRunner;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import reactor.core.publisher.Flux;
    import reactor.core.publisher.Mono;
    
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    
    @SpringBootApplication
    public class CosmosSample implements CommandLineRunner {
    
        private final Logger logger = LoggerFactory.getLogger(CosmosSample.class);
    
        private ReactiveWebCustomerRepository reactiveWebCustomerRepository;
    
        //constructor dependency injection
        public CosmosSample(ReactiveWebCustomerRepository reactiveWebCustomerRepository){
            this.reactiveWebCustomerRepository = reactiveWebCustomerRepository;
        }
    
        public void run(String... var1) {
            logger.info("Hello world.");
        }
    }
    

    Sesederhana itu, kode aplikasi tersebut menerapkan "Halo Dunia."

  7. Jika IDE Anda menawarkan alat untuk membangun dan menjalankan aplikasi Maven Anda: Buat dan jalankan aplikasi Anda menggunakan IDE, dan konfirmasikan bahwa aplikasi tersebut mencatat Hello World ke terminal.

  8. Jika Anda akan menggunakan terminal untuk membuat dan menjalankan aplikasi Maven Anda: Gunakan perintah berikut untuk membuat proyek Maven:

    mvn clean package
    

    Kemudian jalankan:

    mvn spring-boot:run
    

    Konfirmasikan bahwa aplikasi tersebut mencatat output berikut ke terminal, di antara semua output lainnya:

    INFO: Hello World.
    

Dalam unit ini, Anda menyiapkan fondasi awal untuk aplikasi Java Azure Cosmos DB Anda. Anda menyesuaikan aplikasi Maven dan memperluas proyek dasar "Halo Dunia" untuk terhubung ke titik akhir Azure Cosmos DB.