Terapkan Spring Boot WAR ke Server Tomcat

1. Perkenalan

Spring Boot adalah konvensi atas kerangka konfigurasi yang memungkinkan kita menyiapkan penyiapan siap produksi untuk proyek Spring, dan Tomcat adalah salah satu Wadah Servlet Java yang paling populer.

Secara default, Spring Boot membuat aplikasi Java mandiri yang dapat dijalankan sebagai aplikasi desktop atau dikonfigurasi sebagai layanan sistem, tetapi terdapat lingkungan di mana kami tidak dapat menginstal layanan baru atau menjalankan aplikasi secara manual.

Berlawanan dengan aplikasi mandiri, Tomcat diinstal sebagai layanan yang dapat mengelola beberapa aplikasi dalam proses aplikasi yang sama, sehingga tidak perlu pengaturan khusus untuk setiap aplikasi.

Dalam panduan ini, kami akan membuat aplikasi Spring Boot sederhana dan menyesuaikannya agar berfungsi di dalam Tomcat.

2. Menyiapkan Aplikasi Spring Boot

Kami akan menyiapkan aplikasi web Spring Boot sederhana menggunakan salah satu template starter yang tersedia:

 org.springframework.boot spring-boot-starter-parent 2.2.2.RELEASE     org.springframework.boot spring-boot-starter-web  

Tidak perlu konfigurasi tambahan di luar standar @SpringBootApplication karena Spring Boot menangani pengaturan default.

Kami menambahkan Endpoint REST sederhana untuk mengembalikan beberapa konten yang valid untuk kami:

@RestController public class TomcatController { @GetMapping("/hello") public Collection sayHello() { return IntStream.range(0, 10) .mapToObj(i -> "Hello number " + i) .collect(Collectors.toList()); } }

Sekarang mari kita jalankan aplikasi dengan mvn spring-boot: run dan jalankan browser di // localhost: 8080 / hello untuk memeriksa hasilnya.

3. Membuat Spring Boot WAR

Kontainer servlet mengharapkan aplikasi memenuhi beberapa kontrak untuk diterapkan. Untuk Tomcat kontraknya adalah Servlet API 3.0.

Agar aplikasi kita memenuhi kontrak ini, kita harus melakukan beberapa modifikasi kecil pada kode sumber.

Pertama, kita perlu mengemas aplikasi WAR, bukan JAR. Untuk ini, kami mengubah pom.xml dengan konten berikut:

war

Sekarang, mari kita ubah nama file WAR terakhir untuk menghindari menyertakan nomor versi:

 ${artifactId} ... 

Kemudian, kami akan menambahkan dependensi Tomcat:

 org.springframework.boot spring-boot-starter-tomcat provided 

Terakhir, kami menginisialisasi konteks Servlet yang diperlukan oleh Tomcat dengan mengimplementasikan antarmuka SpringBootServletInitializer :

@SpringBootApplication public class SpringBootTomcatApplication extends SpringBootServletInitializer { }

Untuk membangun aplikasi WAR yang dapat diterapkan oleh Tomcat, kami menjalankan paket mvn clean. Setelah itu, file WAR kita dibuat di target / spring-boot-tomcat.war (dengan asumsi artifactId Maven adalah "spring-boot-tomcat").

Kami harus mempertimbangkan bahwa pengaturan baru ini membuat aplikasi Spring Boot kami menjadi aplikasi non-mandiri (jika Anda ingin membuatnya berfungsi dalam mode mandiri lagi, hapus cakupan yang disediakan dari dependensi tomcat).

4. Menerapkan WAR ke Tomcat

Agar file WAR kami disebarkan dan dijalankan di Tomcat, kami perlu menyelesaikan langkah-langkah berikut:

  1. Unduh Apache Tomcat dan ekstrak ke dalam folder kucing jantan
  2. Salin file WAR kami dari target / spring-boot-tomcat.war ke folder tomcat / webapps /
  3. Dari terminal, navigasikan ke folder tomcat / bin dan jalankan
    1. catalina.bat run (pada Windows)
    2. catalina.sh run (pada sistem berbasis Unix)
  4. Buka // localhost: 8080 / spring-boot-tomcat / hello

Ini adalah pengaturan Tomcat yang cepat, silakan periksa panduan Instalasi Tomcat untuk panduan pengaturan lengkap. Ada juga cara tambahan untuk menyebarkan file WAR ke Tomcat.

5. Kesimpulan

Dalam panduan singkat ini, kami membuat aplikasi Spring Boot sederhana dan mengubahnya menjadi aplikasi WAR yang valid yang dapat diterapkan di server Tomcat.

Seperti biasa, kode sumber lengkap dari contoh tersedia di GitHub.