Metode penerapan yang disukai Spring boot adalah melalui file jar yang dapat dieksekusi yang berisi tomcat di dalamnya.
Ini dimulai dengan yang sederhana java -jar myapp.jar
.
Sekarang, saya ingin menerapkan jar itu ke server linux saya di EC2, apakah saya melewatkan sesuatu atau apakah saya benar-benar perlu membuat skrip init untuk memulai aplikasi dengan benar sebagai daemon?
Jika saya hanya memanggil java -jar
aplikasi mati saat saya log out.
Saya dapat memulainya di layar atau nohup tetapi itu tidak terlalu elegan dan memulai ulang di server saya akan memaksa saya untuk masuk dan memulai proses secara manual.
Jadi, apakah sudah ada sesuatu untuk tugas di musim semi boot?
java
linux
spring
spring-boot
Cleber Goncalves
sumber
sumber
Jawaban:
Harap diperhatikan bahwa sejak Spring Boot 1.3.0.M1, Anda dapat membuat jar yang sepenuhnya dapat dijalankan menggunakan Maven dan Gradle.
Untuk Maven, cukup sertakan yang berikut ini di
pom.xml
:Untuk Gradle, tambahkan cuplikan berikut ke Anda
build.gradle
:Jar yang dapat dijalankan sepenuhnya berisi skrip tambahan di bagian depan file, yang memungkinkan Anda untuk menghubungkan jar Spring Boot Anda ke
init.d
atau menggunakansystemd
skrip.init.d
contoh:Ini memungkinkan Anda untuk memulai, menghentikan, dan memulai ulang aplikasi Anda seperti:
Atau gunakan
systemd
skrip:Informasi lebih lanjut di tautan berikut:
init.d
layanansystemd
layanansumber
$ chmod +x /etc/init.d/yourapp
untuk dapat memulai / menghentikan / memulai ulangSejauh ini cara paling mudah dan andal untuk menjalankan aplikasi Spring Boot dalam produksi adalah dengan Docker. Gunakan Docker Compose, Docker Swarm atau Kubernetes jika Anda perlu menggunakan beberapa layanan yang terhubung.
Berikut panduan sederhana
Dockerfile
dari panduan resmi Spring Boot Docker untuk Anda mulai:Berikut ini contoh baris perintah untuk menjalankan container sebagai daemon:
sumber
Aplikasi boot Spring saya memiliki dua penginisialisasi. Satu untuk pengembangan dan satu lagi untuk produksi. Untuk pengembangan, saya menggunakan metode utama seperti ini:
Penginisialisasi saya untuk lingkungan produksi memperluas SpringBootServletInitializer dan terlihat seperti ini:
Saya menggunakan gradle dan file build.gradle saya menggunakan plugin ' WAR '. Ketika saya menjalankannya di lingkungan pengembangan, saya menggunakan tugas bootrun . Sedangkan ketika saya ingin menyebarkannya ke produksi, saya menggunakan tugas assemble untuk menghasilkan WAR dan menyebarkan.
Saya dapat menjalankan seperti aplikasi pegas normal dalam produksi tanpa mengabaikan keuntungan yang diberikan oleh kucing jantan bawaan saat mengembangkan. Semoga ini membantu.
sumber
Dalam lingkungan produksi, Anda ingin aplikasi Anda dimulai lagi saat mesin dimulai ulang, dll., Membuat skrip /etc/init.d/ dan menautkan ke runlevel yang sesuai untuk memulai dan menghentikannya adalah pendekatan yang benar. Spring Boot tidak akan mencakup ini karena ini adalah pengaturan khusus sistem operasi dan ada banyak pilihan lain, apakah Anda ingin menjalankannya di penjara chroot, apakah perlu berhenti / mulai sebelum beberapa perangkat lunak lain, dll.
sumber
Anda bisa menggunakan aplikasi bernama Supervisor . Dalam konfigurasi supervisor Anda dapat menentukan beberapa layanan dan cara untuk menjalankannya.
Untuk aplikasi boot Java dan Spring, perintahnya adalah
java -jar springbootapp.jar
.Pilihan dapat diberikan untuk menjaga aplikasi tetap berjalan, jadi jika EC2 restart maka Supervisor akan merestart aplikasi Anda
Saya menemukan Supervisor mudah digunakan dibandingkan dengan meletakkan skrip startup di /etc/init.d/. Skrip startup akan hang atau masuk ke status menunggu jika terjadi kesalahan.
sumber
Jika Anda menggunakan gradle, Anda bisa menambahkan ini ke build.gradle Anda
Anda kemudian dapat menjalankan aplikasi Anda dengan mengetik ./your-app.jar
Selain itu, Anda dapat menemukan panduan lengkap di sini untuk menyiapkan aplikasi Anda sebagai layanan
56.1.1 Instalasi sebagai layanan init.d (Sistem V)
http://docs.spring.io/spring-boot/docs/current/reference/html/deployment-install.html
Bersulang
sumber
bootRepackage { executable = true }
Lihat docs.spring.io/spring-boot/docs/current/reference/html/…Di OS Windows tanpa Layanan.
start.bat
stop.bat:
run.bat
sumber
Saya memulai aplikasi yang ingin saya jalankan terus-menerus atau setidaknya semi permanen melalui layar -dmS NAMA / path / ke / script. Sejauh yang saya ketahui, ini adalah solusi paling elegan.
sumber
Ini sederhana, Anda dapat menggunakan plugin maven boot musim semi untuk menyelesaikan penerapan kode Anda.
konfigurasi plugin seperti:
Dan,
jvmArtuments
adalah menambahkan untuk Anda jvm.profiles
akan memilih profil untuk memulai aplikasi Anda.executable
dapat membuat aplikasi Anda berjalan dengan cepat.dan jika Anda menambahkan
mvnw
ke proyek Anda, atau Anda memiliki enveriment ahli. Anda bisa memanggil./mvnw spring-boot:run
mvnw ataumvn spring-boot:run
maven.sumber