Cette méthode ne convient que pour des projets plus petits, tels qu'un ou deux serveurs, et le fichier de configuration peut être modifié directement. Par exemple, Spring MVC est déployé sous forme de packages de guerre, et les fichiers de configuration des ressources peuvent être directement modifiés. S'il s'agit d'un projet Spring Boot et que vous souhaitez utiliser cette méthode, vous devez vous référer à un fichier modifiable externe, tel qu'un répertoire fixe, car la plupart des démarrages Spring sont déployés dans des packages JAR, et les fichiers de configuration que vous entrez, le package ne peut pas être modifié directement. S'il s'agit d'un projet relativement important, il est préférable d'utiliser un centre de configuration, tel qu'Apollo, consul, etc. de CTRIP, etc.
Voie originale
La méthode d'origine fait référence au reconditionnement et à la libération du serveur chaque fois que vous souhaitez modifier la configuration.
Supposons que nous utilisons Spring MVC pour nous développer, et une fois le développement terminé, nous formerons un package de guerre et le déployerons sur Tomcat. Si nous modifions une adresse d'interface SMS pour le moment.
Nous devons faire ce qui suit:
1. Ouvrez le fichier de configuration et modifiez les informations de configuration;
2. Compiler et package;
3. Arrêtez Tomcat et supprimez l'ancien répertoire de projet;
4. Mettez le nouveau package de guerre dans WebApps et démarrez Tomcat.
Bien sûr, vous pouvez trouver directement le fichier de configuration de ce projet dans Tomcat, puis le modifier, mais vous devez également redémarrer Tomcat.
Si vous faites simplement du développement ou des tests, il est certainement acceptable d'être un peu une perte de temps. Donc, je ne veux pas perdre de temps ou redémarrer Tomcat, y a-t-il un moyen? C'est le tournant de cet article à présenter.
Méthode WatchService
Java fournit une interface WatchService, qui utilise le moniteur de fichiers du système d'exploitation pour surveiller les répertoires et les fichiers. Lorsque l'objet surveillé change, il y aura des notifications de signal, afin que les changements puissent être découverts efficacement.
Le principe général de cette méthode est: d'abord, nouveau un moniteur (WatchService) en fonction du système d'exploitation, puis sélectionnez le répertoire ou le fichier où le fichier de configuration à surveiller, puis abonnez-vous aux événements à surveiller, tels que la création, la suppression, l'édition et enfin l'enregistrement du moniteur avec l'emplacement surveillé. Une fois l'événement correspondant à l'événement souscrit déclenché, la logique correspondante est exécutée.
Commençons par le code. Ceci est dans un projet Spring MVC et le répertoire des ressources est surveillé.
@RepositoryPublic class configWatcher {private static final logger logger = loggerfactory.getLogger (configWatcher.class); Watchervice statique privé WatchService; @PostConstruct public void init () {logger.info ("Démarrer le moniteur de fichiers de configuration"); essayez {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 (); } / ** * Démarrez le thread de surveillance * / thread watchthread = nouveau thread (new WatchThread ()); watchthread.setDaemon (true); watchthread.start (); / ** Inscrivez-vous pour fermer le crochet * / thread hook = new Thread (new Runnable () {@Override public void run () {try {watchService.close ();} catch (ioException e) {e.printStackTrace ();}}}); Runtime.getRuntime (). AddShutdownHook (hook); } classe publique WatchThread implémente Runnable {@Override public void run () {while (true) {try {// Essayez d'obtenir les modifications dans le pool de surveillance, sinon, attendez watchKey watchKey = watchService.Take (); pour (watchEvent <?> Event: watchKey.PoLevents ()) {String editFileName = event.Context (). ToString (); Logger.info (editFileName); / ** * Configuration de rechargement * /} watchKey.reset (); // Pour terminer la surveillance, vous devez réinitialiser le moniteur une fois} catch (exception e) {e.printStackTrace (); }}}}}Le code est très simple et vous pouvez le comprendre en un coup d'œil. Lorsque le projet démarre, utilisez FileSystems.getDefault (). NewWatchService () pour créer un WatchService, qui est basé sur le système d'exploitation. Ensuite, obtenez l'URL du répertoire des ressources et obtenez le chemin, puis appelez la méthode de registre de l'objet Path, enregistrez le moniteur et abonnez-vous à l'édition et créez des événements. Les événements sont définis dans la classe StandardwatchEventKinds, et il existe quatre types:
1. StandardWatchEventKinds # Overflow
2. StandardWatchEventKinds # Entry_Create
3. StandardWatchEventKinds # entrée_delete
4. StandardWatchEventKinds # Entry_Modify
Ensuite, un thread WatchThread est démarré séparément pour gérer la logique de modification, et la méthode TAKE () est appelée dans une boucle infinie de temps jusqu'à ce qu'un changement se produise. Une fois que le fichier de configuration que nous surveillons modifie, notre logique est appelée pour recharger la configuration. De plus, une fois chaque changement, la méthode WatchKey.ReSet () doit être appelée pour réinitialiser le moniteur.
Enfin, vous devez enregistrer un crochet et vous pouvez désactiver le moniteur lorsque JVM est fermé.
Avec cette méthode, lorsque nous avons des modifications de configuration, nous pouvons dire directement sur Tomcat pour modifier le fichier de configuration, et il peut prendre effet sans redémarrer.
Cet article présente principalement cette méthode, qui est également mentionnée ci-dessus. Cette méthode ne convient que pour des projets très simples. Pour les projets à grande échelle, une méthode plus avancée est requise.
Comment configurer le centre
Lorsque la complexité du projet devient plus élevée, les changements de configuration prennent effet en temps réel, la version en niveaux de gris, divisée en environnements, les configurations de gestion des cluster et les autorisations complètes et les mécanismes d'audit peuvent tous devenir des problèmes à prendre en compte dans le projet. À l'heure actuelle, le fait de s'appuyer uniquement sur les fichiers de configuration semblera incompétent.
Actuellement, les centres de configuration les plus couramment utilisés incluent etcd, ZooKeeper, DisConf, Apollo, etc. Disconf et Apollo sont tous deux prêts à l'emploi, avec des fonctions complètes et une interface utilisateur de support. Et etcd et zookeeper nécessitent un développement personnalisé.
Les étudiants peuvent choisir en fonction de leurs besoins, et le contenu plus détaillé peut être recherché et pratiqué par eux-mêmes.