Этот метод подходит только для небольших проектов, таких как только один или два сервера, и файл конфигурации может быть изменен напрямую. Например, Spring MVC развернута в форме военных пакетов, и файлы конфигурации в ресурсах могут быть напрямую изменены. Если это проект Spring Boot, и вы хотите использовать этот метод, вам необходимо обратиться к внешнему редактируемому файлу, такому как фиксированный каталог, потому что большая часть Spring Boot развернута в пакетах JAR, а файлы конфигурации, в которые вы вводите пакет, не могут быть изменены напрямую. Если это относительно большой проект, лучше всего использовать центр конфигурации, такой как Apollo, Consul и т. Д.
Оригинальный путь
Оригинальный метод относится к переупаковке и выпуску сервера каждый раз, когда вы хотите изменить конфигурацию.
Предположим, мы используем Spring MVC для разработки, и после завершения разработки мы создадим военный пакет и развернете его в Tomcat. Если мы изменим адрес интерфейса SMS в настоящее время.
Нам нужно сделать следующее:
1. Откройте файл конфигурации и измените информацию о конфигурации;
2. Компиля и упаковка;
3. Остановите Tomcat и удалите старый каталог проектов;
4. Поместите новый военный пакет в WebApps и запустите Tomcat.
Конечно, вы можете напрямую найти файл конфигурации этого проекта в Tomcat, а затем изменить его, но вам также необходимо перезапустить Tomcat.
Если вы просто делаете разработку или тестирование, это, безусловно, приемлемо быть немного пустой тратой времени. Итак, я не хочу тратить время или перезагрузить Tomcat, есть ли какой -нибудь путь? Это очередь этой статьи, чтобы представить.
Метод службы
Java предоставляет интерфейс WatchService, который использует собственный монитор файла операционной системы для мониторинга каталогов и файлов. При изменении контролируемого объекта будут уведомления сигнала, чтобы изменения могли быть эффективно обнаружены.
Общий принцип этого метода: во -первых, новый монитор A (наблюдатель) в соответствии с операционной системой, затем выберите каталог или файл, в котором будет контролироваться файл конфигурации, а затем подписаться на события, которые будут контролироваться, такие как создание, удаление, редактирование и, наконец, регистрация монитора с помощью контролируемого местоположения. Как только событие, соответствующее подписанному событию, запускается, выполняется соответствующая логика.
Давайте начнем с кода. Это в весеннем проекте MVC, и каталог ресурсов контролируется.
@RepositoryPublic Class ConfigWatcher {private Static Final Logger logger = loggerFactory.getLogger (configWatcher.class); Частные статические часы -сервис; @Postconstruct public void init () {logger.info ("монитор файла настройки начала"); try {watchservice = fileystems.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 (); } / *** Запустить поток мониторинга* / Thread WatchThread = New Thread (New WatchThread ()); WatchThread.SetDaemon (True); WatchThread.Start (); / ** Зарегистрируйтесь, чтобы закрыть крючок*/ 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 реализует runnable {@Override public void run () {while (true) {try {// попытаться получить изменения в пуле мониторинга, если нет, подождите, пока WatchKey = watchservice.take (); for (watchevent <?> Event: watchkey.pollevents ()) {string editfilename = event.context (). toString (); logger.info (editfilename); /*** Перезагрузить конфигурацию*/} watchkey.reset (); // Чтобы завершить мониторинг, вам необходимо сбросить монитор один раз} Catch (Exception e) {e.printstackTrace (); }}}}}Код очень прост, и вы можете понять его с первого взгляда. Когда проект запускается, используйте файловые системы.getDefault (). NewWatchService () для создания наблюдателя, основанного на операционной системе. Затем получите URL -адрес каталога ресурсов и получите путь, затем вызовите метод регистра объекта PATH, зарегистрируйте монитор и подпишитесь на редактирование и создание событий. События определены в классе StandardWatchEventKinds, и есть четыре типа:
1. Стандартный watcheventKinds#переполнение
2. StandardWatchEventKinds#entry_create
3. StandardWatchEventKinds#entry_delete
4. StandardWatchEventKinds#entry_modify
Затем поток Statchthread запускается отдельно, чтобы обрабатывать логику изменения, а метод Take () называется в некоторое время бесконечному циклу, пока не произойдет изменение. После того, как файл конфигурации мы отслеживаем изменения, наша логика вызвана для перезагрузки конфигурации. Кроме того, после того, как каждое изменение происходит, метод watchkey.reset () должен быть вызван для сброса монитора.
Наконец, вам нужно зарегистрировать крючок, и вы можете выключить монитор, когда JVM закрыт.
С помощью этого метода, когда у нас есть некоторые изменения конфигурации, мы можем напрямую перейти в Tomcat, чтобы изменить файл конфигурации, и он может вступить в силу без перезапуска.
Эта статья в основном представляет этот метод, который также упоминается выше. Этот метод подходит только для очень простых проектов. Для крупномасштабных проектов требуется более продвинутый метод.
Как настроить центр
Когда сложность проекта становится выше, изменения конфигурации вступают в силу в режиме реального времени, выпуск серого, разделенные на среды, конфигурации управления кластером, а также полные разрешения и механизмы аудита могут стать вопросами, которые следует учитывать в проекте. В настоящее время полагаться исключительно на файлы конфигурации будет казаться некомпетентным.
В настоящее время наиболее часто используемые центры конфигурации включают ETCD, Zookeeper, Disconf, Apollo и т. Д. Disconf и Apollo готовы к использованию, с полными функциями и поддерживающим пользовательский интерфейс. И etcd и Zookeeper требуют некоторой индивидуальной разработки.
Студенты могут выбирать в соответствии с их потребностями, и более подробный контент можно искать и практиковать сами.