Karena Springboot adalah kerangka kerja Microservice, metode penyebaran produksinya harus sesederhana mungkin, yang merupakan perbedaan besar dari aplikasi web konvensional. Ini dapat menanamkan wadah web, seperti tomcat, dermaga, dll., Dan tidak perlu lagi mengemas aplikasi ke dalam formulir tertentu yang ditentukan oleh wadah.
Untuk Springboot, mengemasnya ke dalam paket JAR sederhana dan langsung menggunakan Java -Jar dapat dimulai. Ini adalah cara yang sangat elegan, tetapi juga membawa masalah tertentu, seperti: bagaimana cara menghentikan aplikasi? Di masa lalu, aplikasi dikerahkan dalam wadah tertentu, dan skrip yang disediakan oleh wadah dapat dihentikan secara elegan, tetapi sekarang wadah tertanam dan skripnya hilang. Apa yang harus saya lakukan? Pembunuhan langsung adalah cara, tetapi tampaknya terlalu kasar dan dapat membawa banyak masalah yang tidak terduga.
Karena kita dapat memikirkan masalah, jadi akankah pembuat bingkai, lalu apakah mereka menyiapkan solusi untuk kita? Ada ya, dan saya akan memperkenalkan beberapa solusi yang telah saya pelajari di bawah ini.
1. Gunakan titik akhir
Pada bagian 4 dokumentasi resmi Springboot, berbagai fitur yang disiapkan untuk produksi rilis aplikasi diperkenalkan. Di antara mereka, melalui titik akhir HTTP Actuator, pengembang dapat dengan mudah memantau dan mengelola aplikasi.
Memperkenalkan paket starter yang ditentukan:
"org.springframework.boot: spring-boot-starter-aktuator: $ {springbootversion}"Buka dua konfigurasi berikut di Application.yml untuk menghentikan aplikasi melalui permintaan HTTP
Manajemen: Keamanan: Diaktifkan: FaleEndPoints: Shutdown: Diaktifkan: Benar
Perintah operasi adalah sebagai berikut:
CURL -X POST http: // host: port/shutdown
Tetapi metode ini memiliki masalah yang sangat serius, yaitu, siapa pun dapat mengendalikan penghentian aplikasi, yang tidak diragukan lagi tidak dapat diterima untuk aplikasi produksi. Beberapa orang mungkin berpikir bahwa alamat tautannya terlalu sederhana sekarang, dan non-pelayan dapat dengan mudah menebak apakah masalah ini dapat dihindari jika alamat yang sangat kompleks digunakan. Sangat bagus, proposal ini bagus, mari kita lihat konfigurasi yang relevan yang disediakan oleh Springboot.
Titik Akhir: Shutdown: Diaktifkan: jalur true: /xxx
Setelah konfigurasi selesai, perintah di atas tidak lagi tersedia. Perintah perlu diperbarui sebagai:
CURL -X POST http: // host: port/xxx
Tentu saja /xxx hanyalah salah satu yang saya atur dengan santai, Anda dapat mengatur alamat apa pun. Meskipun keamanan sedikit lebih tinggi, tingkat keamanan seperti itu masih belum tersedia untuk diterapkan pada lingkungan produksi. Jadi, apakah ada tindakan perlindungan lainnya? Ya, selain memodifikasi jalur shutdown, kami juga dapat menambahkan konteks terpadu untuk semua operasi manajemen, mengkonfigurasi port independen, dan membatasi akses IP yang ditentukan (biasanya terbatas pada mesin asli). Konfigurasinya adalah sebagai berikut:
Manajemen: Keamanan: Diaktifkan: Port Salah: 9001 Alamat: 127.0.0.1 Konteks-Path: /Admin
Perintah penghentian layanan yang diubah adalah:
CURL -X POST http://127.0.0.1:9001/admin/xxx
Ini sebenarnya cukup aman. Untuk lebih memastikan keamanan sistem, tambahkan lapisan HTTP Basic Auth.
Tingkatkan Ketergantungan Keamanan:
"org.springframework.boot: spring-boot-starter-security: $ {springbootversion}"Ubah file konfigurasi sebagai berikut:
Titik Akhir: Shutdown: Diaktifkan: jalur yang benar: /xxxmanagement: Keamanan: Diaktifkan: Port True: 9001 Alamat: 127.0.0.1 Konteks-path: /AdminSecurity: BASIC: Diaktifkan: Jalur Sejati: /Admin Pengguna: Root Kata Sandi: 123456
Setelah konfigurasi selesai, perintah penghentian akhir adalah:
CURL -X POST -U ROOT: 123456 http://127.0.0.1:9001/admin/xxx
2. Daftar sebagai Layanan Sistem
Selain menjalankan aplikasi Springboot dengan Java -Jar, Anda dapat dengan mudah mendaftar sebagai layanan sistem Linux/UNIX dengan init.d atau systemd, yang membuatnya sangat mudah untuk menginstal dan mengelola aplikasi springboot di lingkungan produksi.
Dalam proyek Maven, untuk membuat toples "sepenuhnya dapat dieksekusi", plug-in berikut perlu diperkenalkan:
<lugin> <groupid> org.springframework.boot </proupid> <RaintifactId> spring-boot-maven-plugin </stifactid> <version> 1.5.2.release </version> <configururation> <Eksekutasi> true </Eksekutable> </configuration> </bognin>
Dalam proyek Gradle, konfigurasi yang setara adalah sebagai berikut:
plugin {id 'org.springframework.boot' versi '1.5.2.release'} springboot {execute = true}Setelah konfigurasi selesai, Anda dapat menjalankan aplikasi yang dibangun melalui ./application-name.jar.
Akhirnya, kita perlu menginstal aplikasi yang dikemas ke dalam layanan init.d, sehingga dapat dengan mudah dikelola menggunakan UNIX/Linux. Metode operasi sangat sederhana. Anda hanya perlu menautkan aplikasi ke init.d (di mana funda adalah nama aplikasi saya sendiri, dan Anda perlu menggantinya sesuai dengan situasi saat bereksperimen).
ln -s /app/funda/funda.jar /etc/init.d/funda
Periksa apakah tautan berhasil ditetapkan
ls -l /etc/init.d/funda
Mulai Layanan, dan log aplikasi dapat melihat file /var/log/funda.log
Layanan Funda Mulai
Perintah umum lainnya
# Periksa status status status status status status# hentikan layanan aplikasi funda stop
Ringkasan Pertanyaan:
Setelah tautan berhasil, aplikasi tidak dapat berhasil dimulai. Itu diminta untuk tidak dapat menemukan Java. Gunakan perintah berikut untuk menautkan perintah JDK Java ke /sbin /java.
ln -s /usr/local/jdk1.8.0_131/bin/java/sbin/java
Tautan referensi:
Titik akhir
Pemantauan dan Manajemen melalui HTTP
Layanan UNIX/Linux
Tidak dapat menemukan Java #5690
Tautan Proyek:
Github: https://github.com/qchery/funda
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.