фон
Springboot все чаще используется всеми для достижения горячего развертывания с помощью Springboot Devtool
То же самое классовое кастекспением появляется
анализировать
Во -первых, определите, появляется ли кастекцепция одного и того же класса, например, потому что класс -загрузчик отличается.
То же самое, зависит ли класс, зависит от двух факторов
То есть класс, объясняемый разными загрузчиками, является разным классом
Общее использование JDBC, когда мы учимся
/** * Возвращает объект {@Code Class}, связанный с классом или * интерфейсом с данным именем строки. Вызывая этот метод * эквивалентен: * * <Blockquote> * {@code class.forname (classname, true, currentloader)} * </blockquote> * где {@code currentloader} обозначает определяющий загрузчик класса * текущего класса. * * <p> Например, следующий фрагмент кода возвращает дескриптор * @code class} для класса с именем * {@code java.lang.thread}: * * <blockquote> * {@code class t = class.forname ("java.lang.thread")} * </blockquote> * <p> * aLame. Приводит к тому, что класс с именем * {@code x} должен быть инициализирован. * * @param classname Полностью квалифицированное имя желаемого класса. * @return the {@code class} объект для класса с указанным именем *. * @Exception linkageError, если сбоя сбоя сбоя * @Exception ExceptionInitializerError Если инициализация, вызванная * этим методом, не выполняет * @Exception classnotfoundexception, если класс не может быть найден */public static class <?> forname (string classname) thriptionslcollcomplase {return forname0 (classname, true, classlalcultrallcrlass {return wordname0 (true, true, classlockllass use);Из вышесказанного мы можем понять, что одни и те же классы, объясняемые разными загрузчиками класса, не могут конвертировать друг друга.
Таким образом, мы нацелены на Devtools.
Мы представили следующие зависимости в Springboot
<segeply> <groupid> org.springframework.boot </GroupId> <artifactid> spring-boot-devtools </artifactid> <plociate> true </opportal> </deperency>
Итак, как исключить зависимости Devtool?
Добавить в Application.properties
spring.devtools.restart.enabled = false
Я обнаружил, что используемое перезапуску по -прежнему можно увидеть при запуске
2018-03-19 22: 04: 37.641 Информация 53428 --- [restartedMain] swsmmarequestmappingHandlerAdapter: ищу @ControllerAdvice: org.springframework.boot.context.embedded.annotationConfigembeddeDebpicationCplication@7443f7 CST 2018]; корень контекста иерархии
2018-03-19 22: 04: 37.654 Информация 53428 --- [restartedMain] SwsmmareQuestmappingHandlerAdapter: обнаруженные реакции BodyAdvice Bean в org.springframework.boot.actuate.autoconfigure.endpointwebmvChyperCemanagemanagemanageCondextOnficureNdpiceAtryAtorNdictorNdictorendPictAtraUtryAtorNdpiceAtrAintrindpinteNpictAtraUtryAtraUtrindpinteChure.
2018-03-19 22: 04: 37.956 Информация 53428 --- [restartedMain] Oswshandler.simpleurlhandlepping: Картун URL-пути [/swagger-ui.html] на обработчик типа [класс org.springframework.web.servlet.resourcehtprequestler.
2018-03-19 22: 04: 37.956 Информация 53428 --- [RestartedMain] Oswshandler.simpleurlhandlerpapp
Почему поток с именем restartEdmain set spring.devtools.restart.enabled Invalid?
Код
ApplicationListener используется в пакете, соответствующем DevTools
Private void OnApplicationStartingEvent (ApplicationStartingEvent Event) {// Пока рано использовать среду Spring, но мы все равно должны позволить пользователям отключить перезапуск с помощью системы системы. String enabled = system.getProperty (enabled_property); if (enabled == null || boolean.parseboolean (enabled)) {string [] args = event.getargs (); DefaulTrestartInitializer initializer = новый DefaulTrestarTartinitializer (); Boolean RestartoronInitialize =! AgentReLoader.Isactive (); Restrater.initialize (args, false, инициализатор, рестаторнитрализация); } else {restarter.disable (); }}Очевидно, что ресторан на самом деле читается из системных переменных, а не из весенней среды. Как говорится в комментарии, на самом деле слишком рано использовать Spring Property в данный момент.
Следовательно, системные переменные могут быть использованы
Поэтому мы можем использовать параметры JVM
-Dspring.devtools.restart.enabled = false
Конечно, в настоящее время все в порядке
2018-03-19 22: 18: 12.928 Информация 66260 --- [main] com.f6car.base.application: Активные профили: Dev Active: dev
2018-03-19 22: 18: 13.131 Информация 66260 --- [Main] ationConfigembeddedWebApplicationContext: освежающий org.springframework.boot.context.embedded.annotationConfigembeddedWebPplicationContext@2a4354CB: startup date [marmbembeddebplication context@2a4354c: start корень контекста иерархии
Итак, какова цель конфигурации в файле конфигурации Spring?
/*** Перезапустить свойства. */public Static Class Resart {Private Static Final String default_restart_excludes = "meta-inf/maven/**," + "meta-inf/resources/**, resources/**, static/**, public/**, templates/**," + "**/*test.class, **/*tests.class, git.properties, meta-inf/buld-info.properties"; Частный статический окончательный длинный default_restart_poll_interval = 1000; Приватный статический окончательный длинный default_restart_quiet_period = 400; /*** Включить автоматический перезапуск. */ private boolean outed = true; /*** Паттерны, которые должны быть исключены из запуска полного перезапуска. */ Private String Exclude = default_restart_excludes; /*** Дополнительные шаблоны, которые должны быть исключены из запуска полного перезапуска. */ private String AdviceLexClude; /*** Количество времени (за миллион секунд), чтобы дождаться опроса об изменениях в классе. */ private long pollinterval = default_restart_poll_interval; /** * Сумма тихого времени (за миллион секунд), требуемое без каких -либо изменений в классе * до того, как запускается перезапуск. */ private long chietPeriod = default_restart_quiet_period; /*** Имя конкретного файла, который при изменении запустит проверку перезапуска. Если * не указано какое -либо изменение файла ClassPath, запустит перезапуск. */ private String TriggerFile; /*** Дополнительные пути для наблюдения за изменениями. */ private list <file> extraPaths = new ArrayList <File> (); public boolean isenabled () {return this.enabled; } public void setEnabled (boolean inabled) {this.enabled = enabled; }Из кода, кажется, используется для настройки того, можно ли перезапустить прослушивание автоматически
/*** Локальная конфигурация перезапуска. */ @Conditionalonproperty (prefix = "spring.devtools.restart", name = "enabled", matchifmissing = true) static class restartconfiguration {@autowired private devtoolsproperties @Eventlistener public void onclasspathchanged (classpathchangedevent event) {if (event.isrestartreequired ()) {restarter.getInstance (). Перезапуск (new FileWatchingFailureHandler (fileSTemWatcherFactory ())); }} @Bean @conditionalonmissingbean public classpathfilesystemwatcher classpathfilesystemwatcher () {url [] urls = restarter.getinstance (). GetInitialUrls (); ClassPathfilesyStemWatcher Watcher = new ClassPathFilesyStemWatcher (fileSystemWatcherFactory (), classPathRestartStrategy (), urls); Watcher.setStopwatcheronRestart (True); вернуть наблюдатель; } @Bean @conditionalonmissingbean public classpathrestartstrategy classpathrestartstrategy () {return new PatternclasspathrestartStrategy (this.properties.getRestart (). Getallexclude ()); } @Bean public hatoAsobjenesiscachedisabler hateoasobjenesiscachedisabler () {return new hateoasobjenesiscachedisabler (); } @Bean public filesystemwatcherfactory filesystemwatcherfactory () {return new filesystemwatcherfactory () {@override public filesystemwatcher getfilesystemwatcher () {return newfilesystemwatcher (); }}; } private fileSystemWatcher newFilesyStemWatcher () {restart restartProperties = this.properties.getRestart (); FileSystemWatcher Watcher = new FileSystemWatcher (true, restartProperties.getPollInterval (), restartProperties.getQuietPeriod ()); String TriggerFile = restartProperties.getTriggerFile (); if (stringutils.haslength (triggerfile)) {watcher.setTriggerFilter (new TriggerFilefilter (TriggerFile)); } List <file> extraPaths = restartPortProperties.getAdditionAlPaths (); для (pail path: extrapaths) {watcher.addsourcefolder (path.getabsolutefile ()); } return Watcher; }}}Вся конфигурация возвращает, зарегистрируется ли соответствующий наблюдатель
Конечно, мы также можем удалить банку
Следует отметить, что при комментировании этого кода вам нужно повторно
MVN чистый
В противном случае, возможно, невозможно автоматически исключить банку
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.