Pengenalan kepada Dropwizard

Java Teratas

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

>> SEMAK KURSUS

1. Gambaran keseluruhan

Dropwizard adalah kerangka Java sumber terbuka yang digunakan untuk pengembangan cepat perkhidmatan web RESTful berprestasi tinggi . Ia mengumpulkan beberapa perpustakaan yang popular untuk membuat pakej ringan. Perpustakaan utama yang digunakannya adalah Jetty, Jersey, Jackson, JUnit, dan Jambu. Selanjutnya, ia menggunakan perpustakaannya sendiri yang disebut Metrik.

Dalam tutorial ini, kita akan belajar bagaimana mengkonfigurasi dan menjalankan aplikasi Dropwizard sederhana. Apabila kami selesai, aplikasi kami akan memaparkan RESTful API yang membolehkan kami mendapatkan senarai jenama tersimpan.

2. Pergantungan Maven

Pertama, kebergantungan inti dropwizard adalah semua yang kita perlukan untuk mewujudkan perkhidmatan kita. Mari tambahkan ke pom.xml kami :

 io.dropwizard dropwizard-core 2.0.0 

3. Konfigurasi

Sekarang, kami akan membuat kelas yang diperlukan untuk setiap aplikasi Dropwizard dijalankan.

Aplikasi Dropwizard menyimpan sifat dalam fail YML. Oleh itu, kami akan membuat fail pengenalan-config.yml di direktori sumber:

defaultSize: 5

Kita boleh mengakses nilai dalam fail 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 mendeserialisasikan fail konfigurasi ke dalam kelas kami . Oleh itu, kami telah menggunakan anotasi Jackson.

Seterusnya, mari buat kelas aplikasi utama, yang bertanggungjawab untuk menyediakan perkhidmatan kami 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, kaedah utama bertanggungjawab untuk menjalankan aplikasi. Kita boleh meneruskan kaedah argumen ke kaedah lari atau mengisinya sendiri.

Argumen pertama boleh menjadi pelayan atau cek . Pilihan cek mengesahkan konfigurasi, sementara pilihan pelayan menjalankan aplikasi. Argumen kedua adalah lokasi fail konfigurasi.

Selanjutnya, kaedah inisialisasi menetapkan penyedia konfigurasi ke ResourceConfigurationSourceProvider , yang membolehkan aplikasi mencari fail konfigurasi tertentu dalam direktori sumber. Tidak wajib mengesampingkan kaedah ini.

Terakhir, kaedah jalankan membolehkan kita mengakses Persekitaran dan Konfigurasi Dasar , yang akan kita gunakan kemudian dalam artikel ini.

4. Sumber

Pertama, mari buat kelas domain untuk jenama kami:

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

Kedua, mari buat kelas BrandRepository yang bertanggungjawab untuk mengembalikan jenama:

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 kerana ia adalah sebahagian daripada Dropwizard itu sendiri.

Ketiga, kami akan membuat kelas BrandResource . Dropwizard menggunakan JAX-RS secara lalai dengan Jersey sebagai pelaksanaan . Oleh itu, kami akan menggunakan anotasi dari spesifikasi ini untuk mendedahkan titik akhir 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 menentukan ukuran sebagai Pilihan untuk menggunakan defaultSize dari konfigurasi kami jika argumen tidak diberikan.

Terakhir, kami akan mendaftarkan BrandResource di kelas IntroductionApplicaton . Untuk melakukannya, mari kita laksanakan kaedah jalankan :

@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 yang dibuat harus didaftarkan dalam kaedah ini.

5. Menjalankan Aplikasi

Di bahagian ini, kita akan belajar bagaimana menjalankan aplikasi dari baris perintah.

Pertama, kami akan mengkonfigurasi projek kami untuk membina fail JAR menggunakan plugin maven-shadow :

 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 dicadangkan. Selain itu, kami telah memasukkan jalan ke kelas utama kami di unsur.

Akhirnya, kami akan membina aplikasi dengan Maven. Setelah kami mempunyai fail JAR, kami dapat menjalankan aplikasi:

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

Tidak perlu melewati parameter kerana kami sudah memasukkannya ke dalam kelas ApplicationApplication .

Selepas itu, log konsol harus diakhiri dengan:

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

Sekarang, aplikasinya mendengarkan di port 8080, dan kita dapat mengakses titik akhir jenama kami di // localhost: 8080 / jenama .

6. Pemeriksaan Kesihatan

Semasa memulakan aplikasi, kami diberitahu bahawa aplikasi tersebut tidak mempunyai pemeriksaan kesihatan. Nasib baik, Dropwizard memberikan penyelesaian mudah untuk menambahkan pemeriksaan kesihatan ke aplikasi kami .

Mari mulakan dengan menambahkan kelas sederhana yang meluaskan com.codahale.metrics.health.HealthCheck :

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

Kaedah mudah ini akan mengembalikan maklumat mengenai kesihatan komponen kita. Kami dapat membuat banyak pemeriksaan kesihatan, dan beberapa di antaranya mungkin gagal dalam situasi tertentu. Sebagai contoh, kami akan mengembalikan Result.unhealthy () jika sambungan ke pangkalan data gagal.

Terakhir, kita perlu mendaftarkan pemeriksaan kesihatan kita dengan kaedah menjalankan kelas Pendahuluan Aplikasi:

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

Setelah menjalankan aplikasi, kita dapat memeriksa respons pemeriksaan kesihatan di // localhost: 8081 / healthcheck :

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

Seperti yang kita lihat, pemeriksaan kesihatan kita telah didaftarkan di bawah tanda permohonan .

7. Kesimpulannya

Dalam artikel ini, kami telah mempelajari cara menyiapkan aplikasi Dropwizard dengan Maven.

Kami telah mengetahui bahawa penyediaan asas aplikasi sangat mudah dan cepat. Selain itu, Dropwizard merangkumi setiap perpustakaan yang kita perlukan untuk menjalankan perkhidmatan web RESTful berprestasi tinggi.

Seperti biasa, kod untuk contoh ini boleh didapati di GitHub.

Bahagian bawah Java

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

>> SEMAK KURSUS