Diese Methode ist nur für kleinere Projekte geeignet, z. B. nur ein oder zwei Server, und die Konfigurationsdatei kann direkt geändert werden. Beispielsweise wird Spring MVC in Form von Kriegspaketen bereitgestellt, und die Konfigurationsdateien in Ressourcen können direkt geändert werden. Wenn es sich um ein Spring -Boot -Projekt handelt und diese Methode verwenden möchten, müssen Sie sich auf eine externe bearbeitbare Datei wie ein festes Verzeichnis beziehen, da der größte Teil des Spring -Starts in JAR -Paketen bereitgestellt wird und die Konfigurationsdateien, die Sie in das Paket eingeben, nicht direkt geändert werden können. Wenn es sich um ein relativ großes Projekt handelt, verwenden Sie am besten ein Konfigurationszentrum, wie z. B. Ctrips Apollo, Konsul usw.
Originalweg
Die ursprüngliche Methode bezieht sich jedes Mal, wenn Sie die Konfiguration ändern möchten.
Angenommen, wir verwenden Spring MVC, um sich zu entwickeln, und nach Abschluss der Entwicklung werden wir ein Kriegspaket bilden und es in Tomcat einsetzen. Wenn wir zu diesem Zeitpunkt eine SMS -Schnittstellenadresse ändern.
Wir müssen Folgendes tun:
1. Öffnen Sie die Konfigurationsdatei und ändern Sie die Konfigurationsinformationen.
2. kompilieren und paket;
3. Stop Tomcat und löschen Sie das alte Projektverzeichnis.
V.
Natürlich können Sie die Konfigurationsdatei dieses Projekts direkt in Tomcat finden und dann ändern, aber Sie müssen auch Tomcat neu starten.
Wenn Sie nur Entwicklung oder Tests durchführen, ist es sicherlich akzeptabel, ein bisschen Zeitverschwendung zu sein. Ich möchte also keine Zeit verschwenden oder Tomcat neu starten. Gibt es eine Möglichkeit? Dies ist die Wende dieses Artikels.
Watchservice -Methode
Java bietet eine WatchService -Schnittstelle, die den eigenen Dateimonitor des Betriebssystems verwendet, um Verzeichnisse und Dateien zu überwachen. Wenn sich das überwachte Objekt ändert, gibt es Signalbenachrichtigungen, sodass Änderungen effizient entdeckt werden können.
Das allgemeine Prinzip dieser Methode lautet: Zunächst neu ein Monitor (WatchService) gemäß dem Betriebssystem, dann das Verzeichnis oder die Datei aus, in dem die zu überwachende Konfigurationsdatei zu überwachen ist, und anschließend die zu überwachten Ereignisse abonnieren, z. B. das Erstellen, Löschen, Bearbeiten und schließlich die Registrierung des Monitors mit dem überwachten Standort. Sobald das dem abonnierte Ereignis entsprechende Ereignis ausgelöst wurde, wird die entsprechende Logik ausgeführt.
Beginnen wir mit dem Code. Dies befindet sich in einem Spring MVC -Projekt, und das Ressourcenverzeichnis wird überwacht.
@RepositoryPublic Class configWatcher {private static Final Logger logger = loggerFactory.getLogger (configWatcher.class); privater statischer Uhrservice Watchservice; @PostConstruct public void init () {logger.info ("Konfigurationsdatei Monitor"); try {watchService = fileSystems.getDefault (). newWatchService (); Url url = configWatcher.class.getResource ("/"); Path path = paths.get (url.touri ()); path.register (WatchService, StandardWatcheventkinds.enterry_Modify, StandardWatcheventkinds.enterry_Create); } catch (Ausnahme e1) {e1.printstacktrace (); } / *** Starten Sie den Überwachungs -Thread* / Thread Watchhread = neuer Thread (neuer WatchThread ()); watchThread.setdaemon (true); watchThread.start (); / ** Registrieren Sie sich, um den Hook zu schließen RunTime.getRuntime (). AddShutdownhook (Hook); } public class WatchThread implementiert Runnable {@Override public void run () {while (true) {try {// Versuche, die Änderungen im Überwachungspool zu erhalten, wenn nicht, auf watchkey watchkey = watchService.take (); für (watchEvent <?> event: watchkey.pollevents ()) {String editFileName = event.context (). toString (); logger.info (editFileName); /*** Konfiguration neu laden*/} watchkey.reset (); // Um die Überwachung zu vervollständigen, müssen Sie den Monitor zurücksetzen} catch (Ausnahme e) {e.printstacktrace (); }}}}}Der Code ist sehr einfach und Sie können ihn auf einen Blick verstehen. Wenn das Projekt beginnt, verwenden Sie DateiSystems.getDefault (). NewWatchService (), um einen Watchservice zu erstellen, der auf dem Betriebssystem basiert. Rufen Sie dann die URL des Ressourcenverzeichnisses und erhalten Sie den Pfad, rufen Sie dann die Registermethode des Pfadobjekts auf, registrieren Sie den Monitor und abonnieren Sie Ereignisse und erstellen Sie Ereignisse. Die Ereignisse sind in der StandardwatcheEventkinds -Klasse definiert, und es gibt vier Typen:
1. Standardwatcheventkinds#Überlauf
2. Standardwatcheventkinds#Eintrag_Create
3. Standardwatcheventkinds#Eintrag_Delete
V
Anschließend wird ein Watchtread -Thread getrennt gestartet, um die Änderungslogik zu verarbeiten, und die Methode take () wird in einer Weile Infinite Loop aufgerufen, bis eine Änderung auftritt. Sobald die von uns überwachte Konfigurationsdatei geändert wird, wird unsere Logik aufgefordert, die Konfiguration neu zu laden. Zusätzlich muss nach jeder Änderung die Methode watchkey.reset () aufgerufen werden, um den Monitor zurückzusetzen.
Schließlich müssen Sie einen Haken registrieren, und Sie können den Monitor ausschalten, wenn JVM geschlossen ist.
Bei dieser Methode können wir bei einigen Konfigurationsänderungen direkt zu Tomcat gehen, um die Konfigurationsdatei zu ändern, und sie kann ohne Neustart wirksam werden.
In diesem Artikel wird diese Methode hauptsächlich vorgestellt, die auch oben erwähnt wird. Diese Methode ist nur für sehr einfache Projekte geeignet. Für groß angelegte Projekte ist eine fortgeschrittenere Methode erforderlich.
So konfigurieren Sie das Zentrum
Wenn die Komplexität des Projekts höher wird, werden die Konfigurationsänderungen in Echtzeit wirksam, Graustufenfreigabe, unterteilt in Umgebungen, Cluster -Management -Konfigurationen und vollständige Berechtigungen und Prüfungsmechanismen können zu Themen werden, die im Projekt berücksichtigt werden. Zu diesem Zeitpunkt scheint es inkompetent zu sein, ausschließlich auf die Konfigurationsdateien zu stützen.
Derzeit sind die am häufigsten verwendeten Konfigurationszentren etcd, zookeeper, disconf, apollo usw. disconf und apollo sind beide einsatzbereit, mit vollständigen Funktionen und unterstützenden Benutzeroberflächen. Und ETCD und Zookeeper erfordern eine benutzerdefinierte Entwicklung.
Die Schüler können nach ihren Bedürfnissen wählen, und detailliertere Inhalte können von sich selbst durchsucht und geübt werden.