Este método solo es adecuado para proyectos más pequeños, como solo uno o dos servidores, y el archivo de configuración se puede modificar directamente. Por ejemplo, Spring MVC se implementa en forma de paquetes de guerra, y los archivos de configuración en recursos pueden modificarse directamente. Si se trata de un proyecto de arranque de Spring y desea utilizar este método, debe consultar un archivo editable externo, como un directorio fijo, porque la mayoría de los arranque de primavera se implementan en paquetes JAR, y los archivos de configuración que ingresan al paquete no se pueden modificar directamente. Si es un proyecto relativamente grande, es mejor usar un centro de configuración, como el Apolo, cónsul, etc. de Ctrip, etc.
Forma original
El método original se refiere a reempaquetarse y liberar el servidor cada vez que desea modificar la configuración.
Supongamos que usamos Spring MVC para desarrollar, y después de completar el desarrollo, formaremos un paquete de guerra e implementaremos en Tomcat. Si modificamos una dirección de interfaz SMS en este momento.
Necesitamos hacer lo siguiente:
1. Abra el archivo de configuración y modifique la información de configuración;
2. Compilar y paquete;
3. Detente a Tomcat y elimine el antiguo directorio del proyecto;
4. Pon el nuevo paquete de guerra en las capas web y comience a Tomcat.
Por supuesto, puede encontrar directamente el archivo de configuración de este proyecto en Tomcat y luego modificarlo, pero también debe reiniciar Tomcat.
Si solo hace desarrollo o pruebas, ciertamente es aceptable ser un poco de tiempo. Entonces, no quiero perder el tiempo o reiniciar Tomcat, ¿hay alguna forma? Este es el giro de este artículo para introducir.
Método WatchService
Java proporciona una interfaz WatchService, que utiliza el propio monitor de archivos del sistema operativo para monitorear directorios y archivos. Cuando el objeto monitoreado cambia, habrá notificaciones de señal, para que los cambios se puedan descubrir de manera eficiente.
El principio general de este método es: primero, un nuevo monitor (WatchService) de acuerdo con el sistema operativo, luego seleccione el directorio o el archivo donde se monitoree el archivo de configuración, y luego suscribe a los eventos que se monitorearán, como crear, eliminar, editar y finalmente registrar el monitor con la ubicación monitoreada. Una vez que se activa el evento correspondiente al evento suscrito, se ejecuta la lógica correspondiente.
Comencemos con el código. Esto está en un proyecto MVC de primavera, y se monitorea el directorio de recursos.
@RepositoryPublic Class ConfigWatcher {private static final logger logger = loggerFactory.getLogger (configwatcher.class); servicio de vigilancia de observación estática privada; @PostConstruct public void init () {logger.info ("Iniciar el monitor de archivo de configuración"); intente {watchService = filesystems.getDefault (). NewWatchService (); Url url = configwatcher.class.getResource ("/"); Ruta ruta = ruta.get (url.touri ()); Path.Register (WatchService, StandardWatchEventKinds.Entry_Modify, StandardWatchEventKinds.Entry_Create); } catch (excepción e1) {e1.printstackTrace (); } / *** iniciar el hilo de monitoreo* / hilo watchthread = new Thread (new WatchThread ()); WatchThread.SetDaemon (verdadero); WatchThread.Start (); / ** Regístrese para cerrar el Hook*/ Thread Hook = New Thread (new Runnable () {@Override public void run () {try {watchService.close ();} catch (ioexception e) {e.printstacktrace ();}}}); Runtime.getRuntime (). AddShutdownHook (Hook); } public class WatchThread implementa Runnable {@Override public void run () {while (true) {try {// intente obtener los cambios en el grupo de monitoreo, si no, espere WatchKey watchkey = watchService.take (); for (watchEvent <?> Event: watchKey.pollevents ()) {string editFileName = event.context (). toString (); logger.info (editFileName); /*** Configuración de recarga*/} watchKey.reset (); // Para completar el monitoreo, debe restablecer el monitor una vez} Catch (Exception e) {E.PrintStackTrace (); }}}}}El código es muy simple y puede entenderlo de un vistazo. Cuando comience el proyecto, use FileSystems.getDefault (). NewWatchService () para crear un WatchService, que se basa en el sistema operativo. Luego obtenga la URL del directorio de recursos y obtenga la ruta, luego llame al método de registro del objeto de ruta, registre el monitor y suscríbase a editar y crear eventos. Los eventos se definen en la clase StandardWatchEventKinds, y hay cuatro tipos:
1. StandardWatchEventKinds#desbordamiento
2. StandardWatchEventKinds#entry_create
3. StandardWatchEventKinds#Entry_Delete
4. StandardWatchEventKinds#entry_modify
Luego, se inicia un hilo de WatchThread por separado para manejar la lógica de cambio, y el método Take () se llama en un bucle infinito hasta que ocurra un cambio. Una vez que cambia el archivo de configuración que monitoreamos, se llama a nuestra lógica para recargar la configuración. Además, después de que se produce cada cambio, se debe llamar al método WatchKey.reset () para restablecer el monitor.
Finalmente, debe registrar un gancho y puede apagar el monitor cuando JVM esté cerrado.
Con este método, cuando tenemos algunos cambios de configuración, podemos ir directamente a TomCat para modificar el archivo de configuración, y puede entrar en vigencia sin reiniciar.
Este artículo presenta principalmente este método, que también se menciona anteriormente. Este método solo es adecuado para proyectos muy simples. Para proyectos a gran escala, se requiere un método más avanzado.
Cómo configurar el centro
Cuando la complejidad del proyecto aumenta, los cambios de configuración surtan efecto en tiempo real, la liberación de la escala de grises, dividido en entornos, configuraciones de gestión de clúster y permisos completos y mecanismos de auditoría pueden convertirse en problemas a considerar en el proyecto. En este momento, confiar únicamente en los archivos de configuración parecerá incompetente.
Actualmente, los centros de configuración más utilizados incluyen ETCD, Zookeeper, Disconf, Apollo, etc. Disconf y Apollo están listos para usar, con funciones completas y UI de apoyo. Y ETCD y Zookeeper requieren algún desarrollo personalizado.
Los estudiantes pueden elegir de acuerdo con sus necesidades, y se puede buscar y practicar contenido más detallado.