Pengantar Dropwizard

Java Top

Saya baru saja mengumumkan kursus Learn Spring baru , yang berfokus pada dasar-dasar Spring 5 dan Spring Boot 2:

>> LIHAT KURSUSnya

1. Ikhtisar

Dropwizard adalah framework Java sumber terbuka yang digunakan untuk pengembangan cepat layanan web RESTful berperforma tinggi . Ini mengumpulkan beberapa perpustakaan populer untuk membuat paket ringan. Perpustakaan utama yang digunakan adalah Jetty, Jersey, Jackson, JUnit, dan Guava. Selain itu, ia menggunakan pustaka sendiri yang disebut Metrik.

Dalam tutorial ini, kita akan belajar cara mengkonfigurasi dan menjalankan aplikasi Dropwizard sederhana. Ketika kita selesai, aplikasi kita akan mengekspos RESTful API yang memungkinkan kita mendapatkan daftar merek yang disimpan.

2. Ketergantungan Maven

Pertama, ketergantungan dropwizard-core adalah semua yang kita butuhkan untuk membuat layanan kita. Mari tambahkan ke pom.xml kita :

 io.dropwizard dropwizard-core 2.0.0 

3. Konfigurasi

Sekarang, kita akan membuat kelas yang diperlukan yang diperlukan untuk menjalankan setiap aplikasi Dropwizard.

Aplikasi Dropwizard menyimpan properti dalam file YML. Oleh karena itu, kami akan membuat file pengenalan-config.yml di direktori sumber daya:

defaultSize: 5

Kita dapat mengakses nilai dalam file itu dengan membuat kelas yang memperluas io.dropwizard.Configuration :

public class BasicConfiguration extends Configuration { @NotNull private final int defaultSize; @JsonCreator public BasicConfiguration(@JsonProperty("defaultSize") int defaultSize) { this.defaultSize = defaultSize; } public int getDefaultSize() { return defaultSize; } }

Dropwizard menggunakan Jackson untuk deserialisasi file konfigurasi ke dalam kelas kita . Karenanya, kami telah menggunakan anotasi Jackson.

Selanjutnya, mari buat kelas aplikasi utama, yang bertanggung jawab untuk menyiapkan layanan kita untuk penggunaan:

public class IntroductionApplication extends Application { public static void main(String[] args) throws Exception { new IntroductionApplication().run("server", "introduction-config.yml"); } @Override public void run(BasicConfiguration basicConfiguration, Environment environment) { //register classes } @Override public void initialize(Bootstrap bootstrap) { bootstrap.setConfigurationSourceProvider(new ResourceConfigurationSourceProvider()); super.initialize(bootstrap); } }

Pertama, metode utama bertanggung jawab untuk menjalankan aplikasi. Kita bisa meneruskan args ke metode run atau mengisinya sendiri.

Argumen pertama bisa berupa server atau cek . The cek pilihan memvalidasi konfigurasi, sedangkan server yang pilihan menjalankan aplikasi. Argumen kedua adalah lokasi file konfigurasi.

Selain itu, metode inisialisasi menyetel penyedia konfigurasi ke ResourceConfigurationSourceProvider , yang memungkinkan aplikasi menemukan file konfigurasi tertentu dalam direktori resource. Metode ini tidak wajib diganti.

Terakhir, metode run memungkinkan kita untuk mengakses Environment dan BaseConfiguration , yang akan kita gunakan nanti di artikel ini.

4. Sumber daya

Pertama, mari buat kelas domain untuk merek kita:

public class Brand { private final Long id; private final String name; // all args constructor and getters }

Kedua, mari buat kelas BrandRepository yang akan bertanggung jawab untuk mengembalikan merek:

public class BrandRepository { private final List brands; public BrandRepository(List brands) { this.brands = ImmutableList.copyOf(brands); } public List findAll(int size) { return brands.stream() .limit(size) .collect(Collectors.toList()); } public Optional findById(Long id) { return brands.stream() .filter(brand -> brand.getId().equals(id)) .findFirst(); } }

Selain itu, kami dapat menggunakan ImmutableList dari Guava karena itu adalah bagian dari Dropwizard itu sendiri.

Ketiga, kita akan membuat kelas BrandResource . Dropwizard menggunakan JAX-RS secara default dengan Jersey sebagai implementasi . Oleh karena itu, kami akan menggunakan anotasi dari spesifikasi ini untuk mengekspos endpoint REST API kami:

@Path("/brands") @Produces(MediaType.APPLICATION_JSON) public class BrandResource { private final int defaultSize; private final BrandRepository brandRepository; public BrandResource(int defaultSize, BrandRepository brandRepository) { this.defaultSize = defaultSize; this.brandRepository = brandRepository; } @GET public List getBrands(@QueryParam("size") Optional size) { return brandRepository.findAll(size.orElse(defaultSize)); } @GET @Path("/{id}") public Brand getById(@PathParam("id") Long id) { return brandRepository .findById(id) .orElseThrow(RuntimeException::new); } }

Selain itu, kami telah menetapkan ukuran sebagai Opsional untuk menggunakan defaultSize dari konfigurasi kami jika argumen tidak disediakan.

Terakhir, kami akan mendaftarkan BrandResource di kelas IntroductionApplicaton . Untuk melakukan itu, mari implementasikan metode run :

@Override public void run(BasicConfiguration basicConfiguration, Environment environment) { int defaultSize = basicConfiguration.getDefaultSize(); BrandRepository brandRepository = new BrandRepository(initBrands()); BrandResource brandResource = new BrandResource(defaultSize, brandRepository); environment .jersey() .register(brandResource); }

Semua sumber daya yang dibuat harus terdaftar dalam metode ini.

5. Menjalankan Aplikasi

Di bagian ini, kita akan belajar cara menjalankan aplikasi dari baris perintah.

Pertama, kami akan mengkonfigurasi proyek kami untuk membuat file JAR menggunakan maven-shade-plugin :

 org.apache.maven.plugins maven-shade-plugin  true   *:*  META-INF/*.SF META-INF/*.DSA META-INF/*.RSA       package  shade      com.baeldung.dropwizard.introduction.IntroductionApplication      

Ini adalah konfigurasi plugin yang disarankan. Selain itu, kami telah menyertakan jalur ke kelas utama kami di elemen.

Terakhir, kami akan membangun aplikasi dengan Maven. Setelah kami memiliki file JAR kami, kami dapat menjalankan aplikasi:

java -jar target/dropwizard-0.0.1-SNAPSHOT.jar

Tidak perlu meneruskan parameter karena kita sudah memasukkannya ke dalam kelas IntroductionApplication .

Setelah itu, log konsol harus diakhiri dengan:

INFO [2020-01-08 18:55:06,527] org.eclipse.jetty.server.Server: Started @1672ms

Sekarang, aplikasi sedang mendengarkan pada port 8080, dan kita dapat mengakses titik akhir merek kita di // localhost: 8080 / merek .

6. Pemeriksaan Kesehatan

Saat memulai aplikasi, kami diberi tahu bahwa aplikasi tersebut tidak memiliki health check. Untungnya, Dropwizard memberikan solusi mudah untuk menambahkan health check ke aplikasi kita .

Mari kita mulai dengan menambahkan kelas sederhana yang memperluas com.codahale.metrics.health.HealthCheck :

public class ApplicationHealthCheck extends HealthCheck { @Override protected Result check() throws Exception { return Result.healthy(); } }

This simple method will return information about the healthiness of our component. We could create multiple health checks, and some of them might fail in certain situations. For instance, we would return Result.unhealthy() if the connection to the database failed.

Lastly, we need to register our health check in the run method of our IntroductionApplication class:

environment .healthChecks() .register("application", new ApplicationHealthCheck());

After running the application, we can check the health check response under //localhost:8081/healthcheck:

{ "application": { "healthy": true, "duration": 0 }, "deadlocks": { "healthy": true, "duration": 0 } }

As we can see, our health check has been registered under the application tag.

7. Conclusion

In this article, we've learned how to set up the Dropwizard application with Maven.

Kami telah menemukan bahwa pengaturan dasar aplikasi sangat mudah dan cepat. Selain itu, Dropwizard menyertakan setiap pustaka yang kami butuhkan untuk menjalankan layanan web RESTful berkinerja tinggi.

Seperti biasa, kode untuk contoh ini tersedia di GitHub.

Jawa bawah

Saya baru saja mengumumkan kursus Learn Spring baru , yang berfokus pada dasar-dasar Spring 5 dan Spring Boot 2:

>> LIHAT KURSUSnya