Latihan - Siapkan aplikasi Java Anda menggunakan Maven
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.
- Masuk ke portal Microsoft Azure dengan menggunakan akun yang sama dengan yang Anda gunakan untuk mengaktifkan kotak pasir.
- 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. - Pada akun Azure Cosmos DB Anda, buat database bernama Users.
- Dalam database Pengguna, buat kontainer bernama WebCustomers dengan kunci partisi /userId. Sediakan 400 RU/s untuk WebCustomers.
Membuat direktori kerja Anda
Kami menyediakan templat untuk aplikasi Java Anda. Kloning repositori templat ke sistem Anda.
git clone https://github.com/MicrosoftDocs/mslearn-cosmos-java-sql.git
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.
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.
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."
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.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
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>";
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 adalahelzirrKCnXlacvh1CRAnQdYVbVLspmYHQyYrhx0PltHi8wn5lHVHFnd1Xm3ad5cn4TUcH4U0MSeHsVykkFPHpQ==
, 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.
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
, dancontainer
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 pernyataanimport
agar dapat berfungsi.Buat metode
private void
bernamabasicOperations
tanpa argumen di kelas.Tambahkan kode berikut untuk membuat instans
CosmosAsyncClient
dalam metodebasicOperations
, 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();
Pada tahap ini, metode
basicOperations
Anda berisi kode untuk berinteraksi dengan Azure Cosmos DB. Namun, metode ini tidak dipanggil dimain
, 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.
Salin dan tempelkan kode berikut ke dalam metode
main
, menimpa barislogger.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.
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.
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
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.
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
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.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 adalahelzirrKCnXlacvh1CRAnQdYVbVLspmYHQyYrhx0PltHi8wn5lHVHFnd1Xm3ad5cn4TUcH4U0MSeHsVykkFPHpQ==
, 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.
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 anggotaCosmosProperties
sesuai dengan nama properti application.properties. KelasCosmosProperties
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.
Dalam CosmosSampleConfiguration.java, periksa kelas
CosmosSampleConfiguration
dan temukan metodecosmosClientBuilder
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 metodebuild()
-nya - yang pada titik ini (di bawah kap) instansCosmosAsyncClient
akan dibuat berdasarkan pengaturan konfigurasi yang terkandung dalamCosmosClientBuilder
. Anda dapat menggunakan metode ini untuk mengonfigurasiCosmosClientBuilder
menggunakan metode penyusun.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 mengimplementasikancosmosClientBuilder
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
- Menarik uri dan kunci dari
properties
- Memasukkannya ke dalam metode penyusun
endpoint
dankey
- 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.)
- Menarik uri dan kunci dari
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.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 {
-
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."
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.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.