Metode ini hanya cocok untuk proyek yang lebih kecil, seperti hanya satu atau dua server, dan file konfigurasi dapat dimodifikasi secara langsung. Misalnya, Spring MVC digunakan dalam bentuk paket perang, dan file konfigurasi dalam sumber daya dapat dimodifikasi secara langsung. Jika ini adalah proyek Spring Boot dan Anda ingin menggunakan metode ini, Anda perlu merujuk ke file yang dapat diedit eksternal, seperti direktori tetap, karena sebagian besar boot pegas digunakan dalam paket JAR, dan file konfigurasi yang Anda masukkan paket tidak dapat dimodifikasi secara langsung. Jika ini adalah proyek yang relatif besar, yang terbaik adalah menggunakan pusat konfigurasi, seperti CTRIP's Apollo, konsul, dll.
Cara asli
Metode asli mengacu pada pengemasan ulang dan melepaskan server setiap kali Anda ingin memodifikasi konfigurasi.
Misalkan kita menggunakan Spring MVC untuk berkembang, dan setelah pengembangan selesai, kita akan membentuk paket perang dan menggunakannya ke Tomcat. Jika kami memodifikasi alamat antarmuka SMS saat ini.
Kita perlu melakukan hal berikut:
1. Buka file konfigurasi dan ubah informasi konfigurasi;
2. Kompilasi dan paket;
3. Hentikan Tomcat dan hapus Direktori Proyek Lama;
4. Masukkan paket perang baru di WebApps dan mulai Tomcat.
Tentu saja, Anda dapat langsung menemukan file konfigurasi proyek ini di Tomcat dan kemudian memodifikasinya, tetapi Anda juga perlu memulai kembali Tomcat.
Jika Anda hanya melakukan pengembangan atau pengujian, tentu saja dapat diterima untuk menjadi sedikit buang -buang waktu. Jadi, saya tidak ingin membuang waktu atau memulai kembali Tomcat, apakah ada cara? Ini adalah pergantian artikel ini untuk diperkenalkan.
Metode layanan jam tangan
Java menyediakan antarmuka WatchService, yang menggunakan monitor file sistem operasi sendiri untuk memantau direktori dan file. Ketika objek yang dipantau berubah, akan ada pemberitahuan sinyal, sehingga perubahan dapat ditemukan secara efisien.
Prinsip umum dari metode ini adalah: Pertama, monitor A baru (WatchService) sesuai dengan sistem operasi, kemudian pilih direktori atau file di mana file konfigurasi yang akan dipantau, dan kemudian berlangganan acara yang akan dipantau, seperti membuat, menghapus, mengedit, dan akhirnya mendaftarkan monitor dengan lokasi yang dipantau. Setelah peristiwa yang sesuai dengan acara yang berlangganan dipicu, logika yang sesuai dijalankan.
Mari kita mulai dengan kode. Ini dalam proyek MVC Musim Semi, dan Direktori Sumber Daya dipantau.
@RepositoryPublic kelas configWatcher {private static final Logger Logger = loggerFactory.getLogger (configWatcher.class); Layanan Jam Tangan Statis Pribadi; @PostConstruct public void init () {logger.info ("Mulai Monitor File Konfigurasi"); coba {watchservice = filesystems.getDefault (). newwatchservice (); Url url = configWatcher.class.getResource ("/"); Path path = paths.get (url.touri ()); Path.Register (WatchService, StandardWatchEventKinds.entry_Modify, StandardWatchEventKinds.entry_Create); } catch (Exception e1) {e1.printstacktrace (); } / *** Mulai utas pemantauan* / utas watchthread = utas baru (watchhread baru ()); watchthread.setdaemon (true); watchthread.start (); / ** Daftar untuk menutup kait*/ thread hook = utas baru (runnable baru () {@Override public void run () {coba {watchservice.close ();} catch (ioException e) {e.printstacktrace ();}}}); Runtime.getRuntime (). AddShutdownHook (hook); } kelas public waittthread mengimplementasikan runnable {@Override public void run () {while (true) {coba {// Cobalah untuk mendapatkan perubahan di kumpulan pemantauan, jika tidak, tunggu watchkey watchkey = watchservice.take (); untuk (WatchEvent <?> Event: watchkey.pollevents ()) {string editFileName = event.context (). toString (); logger.info (editFileName); /*** Muat ulang konfigurasi*/} watchkey.reset (); // Untuk menyelesaikan pemantauan, Anda perlu mengatur ulang monitor sekali} tangkap (pengecualian e) {e.printstacktrace (); }}}}}Kode ini sangat sederhana dan Anda dapat memahaminya secara sekilas. Saat proyek dimulai, gunakan fileSystems.getDefault (). NewWatchService () untuk membuat WatchService, yang didasarkan pada sistem operasi. Kemudian dapatkan URL direktori sumber daya, dan dapatkan jalurnya, lalu hubungi metode register objek path, daftarkan monitor, dan berlangganan untuk mengedit dan membuat acara. Acara didefinisikan dalam kelas StandardWatchEventKinds, dan ada empat jenis:
1. StandardWatchEventKinds#overflow
2. StandardWatchEventKinds#entri_create
3. StandardWatchEventKinds#entri_delete
4. StandardWatchEventKinds#entri_modify
Kemudian utas pengawas dimulai secara terpisah untuk menangani logika perubahan, dan metode take () dipanggil dalam beberapa waktu tak terbatas sampai terjadi perubahan. Setelah file konfigurasi yang kami monitor berubah, logika kami dipanggil untuk memuat ulang konfigurasi. Selain itu, setelah setiap perubahan terjadi, metode watchkey.reset () harus dipanggil untuk mengatur ulang monitor.
Akhirnya, Anda perlu mendaftarkan kait, dan Anda dapat mematikan monitor saat JVM ditutup.
Dengan metode ini, ketika kami memiliki beberapa perubahan konfigurasi, kami dapat langsung pergi ke Tomcat untuk memodifikasi file konfigurasi, dan itu dapat berlaku tanpa memulai kembali.
Artikel ini terutama memperkenalkan metode ini, yang juga disebutkan di atas. Metode ini hanya cocok untuk proyek yang sangat sederhana. Untuk proyek skala besar, diperlukan metode yang lebih maju.
Cara mengkonfigurasi pusat
Ketika kompleksitas proyek menjadi lebih tinggi, perubahan konfigurasi mulai berlaku secara real time, pelepasan grayscale, dibagi menjadi lingkungan, konfigurasi manajemen cluster, dan izin lengkap dan mekanisme audit semuanya dapat menjadi masalah yang harus dipertimbangkan dalam proyek. Pada saat ini, hanya mengandalkan file konfigurasi akan tampak tidak kompeten.
Saat ini, pusat konfigurasi yang paling umum digunakan termasuk ETCD, Zookeeper, Disconf, Apollo, dll. Disconf dan Apollo keduanya siap digunakan, dengan fungsi lengkap dan UI pendukung. Dan ETCD dan ZooKeeper memerlukan beberapa pengembangan khusus.
Siswa dapat memilih sesuai dengan kebutuhan mereka, dan konten yang lebih rinci dapat dicari dan dipraktikkan sendiri.