Не завидуйте мандаринкам или бессмертным, а корректируйте строчку кода долго. Оригинал: Miss Sister Taste (идентификатор публичной учетной записи WeChat: xjjdog), добро пожаловать, пожалуйста, сохраните источник для перепечатки.
Старший разработчик, впервые использовавший SpringBoot, решил напечатать классическийHelloWorld
.
Из-за того, что он был так взволнован, он опечатался в письме, и оно сталоHalloWorld
.
Привет? Как приземленно, как вульгарно, как несекретно, как бетель человек во рту, не может выдохнуть, обязательно нужно исправлять.
В итоге после изменения на hello старший инженер обнаружил, что приложение нужно перезапустить, чтобы оно вступило в силу. После ожидания более десяти секунд система медленно запускалась.
Некоторые вещи хороши в течение длительного времени, но для такого сценария отладки кода это невыносимо.
Старший инженер выплюнул бенгланг в рот, подумав про себя, что пора разработать инструмент для ускорения отладки.
Здесь на помощь приходит SBDT.
spring-boot-devtools
SpringBoot
,StringBuilder
,StringBuffer
, широко известный как 3 в мире JavaSB
. особенноSpringBoot
, очень прост в использовании, в основном из-за егоautoconfig
, опираясь на соглашения по стандартизации разработки.
Но проблема в том, что SpringBoot загружает слишком много Jar-пакетов, которые слишком велики, и каждый запуск занимает много времени. Для сервисов SpringBoot,spring-boot-devtools
Как своевременный порыв дождя, увлажняющий одноклассников, ошеломленно уставившихся на экран перезагрузки.
Хоть этой штуки уже давно нет, я обнаружил, что в реальных проектах люди все равно меньше ее используют. Но он очень прост в использовании.
Только в проектеpom
В файле добавьте следующий пакет jar, чтобы получить秒
уровень перезагрузки сервиса (горячее развертывание).
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
так какstarter文件
Значение по умолчанию в true, поэтому конфигурация в следующем yml не требуется.
spring:
devtools:
restart:
enabled: true
Давайте проверим. пришел быстро.
Создайте новый простой контроллер и выведите helloworld.
@Controller
public class DemoController {
@GetMapping("/test")
@ResponseBody
public String test(){
return "halloworld";
}
}
Измените код и измените привет на привет. Консоль начнет прокручивать журнал вывода, загружая код проекта. На этом этапе зайдите в браузер и убедитесь, что наши изменения вступили в силу.
# 日志显示
Started MbyeApplication in 1.731 seconds (JVM running for 51.115)
Консоль также выводит время перезапуска, которое заняло менее 2 секунд, что можно сказать очень быстро.
Чтобы запустить компиляцию в реальном времени после изменения кода, вам необходимо выполнить следующую настройку в IDEA. Если эта конфигурация не вступит в силу, вам нужно вручную нажать Build (обратите внимание, что это не перестроение).
Почему горячее развертывание перезагружается так быстро? Потому что его перезапуск — это не полный перезапуск всего приложения, а только кода нашего приложения.
по конфигурацииMETA-INF/spring-devtools.properties
можно указать загружать сторонние пакеты jar при каждом перезапуске. Однако такие сценарии встречаются редко. Конечно, есть include, old exclude, примеры следующие.
restart.exclude.somejar=/somejar-[\\w-]+\.jar
restart.include.ajar=/ajar-[\\w-]+\.jar
Я заметил интересную вещь. Когда мы начинаем с IDEA, вывод консоли выглядит следующим образом.
2020-09-18 21:33:59.495 INFO 4635 --- [ restartedMain] c.g.javarunfast.mbye.MbyeApplication : Starting MbyeApplication on LYCYs-MacBook-Pro.local with PID 4635 (/target/classes started by xjjdog in /Users/xjjdog/codes/javarunfast/mbye)
2020-09-18 21:33:59.495 INFO 4635 --- [ restartedMain] c.g.javarunfast.mbye.MbyeApplication : No active profile set, falling back to default profiles: default
2020-09-18 21:34:00.355 INFO 4635 --- [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode!
2020-09-18 21:34:00.355 INFO 4635 --- [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Elasticsearch repositories in DEFAULT mode.
2020-09-18 21:34:00.357 INFO 4635 --- [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 1ms. Found 0 Elasticsearch repository interfaces.
2020-09-18 21:34:00.362 INFO 4635 --- [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode!
2020-09-18 21:34:00.362 INFO 4635 --- [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Reactive Elasticsearch repositories in DEFAULT mode.
Поток запуска внутриrestartedMain
. но когда мы используемjava -jar *jar
Когда дело доходит до запуска, основной процесс неrestartedMain
, ноmain
.
Это потому, что бессмысленно открывать devtools в онлайн-среде.
Эта фраза временно сказана, потому что она даст пощечину.
Больше возможностей
Чтобы понять, что делает devtools, давайте взглянем на его исходную структуру каталогов.
filewatch
иclasspath
Само собой разумеется, отслеживая изменения файлов, можно добиться горячего старта. Он в принципе использует независимыйClassLoader
(конкретно относится к RestartClassLoader), чтобы завершить замену после загрузки.
Изучите эту часть кода, и вы сможете лучше понять загрузчик классов Java.
LiveReload
Далееlivereload
Функции.
LiveReload часто используется при фронтенд-разработке.
Devtools также откроет сервер LiveReload в фоновом режиме, и браузер будет поддерживать длительное соединение с этим сервером.前端资源
При внесении изменений браузер будет уведомлен о необходимости обновления для обеспечения горячего развертывания.
Ниже хромRemote Live Reload
Адрес плагина. Установите, чтобы иметь эту классную функцию.
https://chrome.google.com/webstore/detail/remotelivereload/jlppknnillhjgiengoigajegdpieppei?hl=en-GB
Удаленное развертывание
Это более интересно. Как мы упоминали выше, открывать devtools в онлайн-среде бессмысленно, а теперь давайте посмотрим правде в глаза.
У вас может быть низкая производительность вашей собственной машины, вы можете позволить коду работать на удаленной стороне и разрабатывать код только локально. В настоящее время можно использовать удаленное горячее развертывание.
Чтобы включить эту функцию, необходимо выполнить несколько шагов.
шаг первый.
нуждаться вpom.xml
средняя параspring-boot-maven-plugin
Внесите следующие изменения.
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludeDevtools>false</excludeDevtools>
</configuration>
</plugin>
Шаг второй.
Установите ключ для подключения сервера к концу отладки в yml.
spring:
devtools:
remote:
secret: test
Шаг третий.
Упакуйте сервис SB в банку и запустите его.
mvn -Dmaven.test.skip=true -Pdev package
java -jar -Xdebug \
-Xrunjdwp:server=y,transport=dt_socket,suspend=n \
mbye-0.0.1-SNAPSHOT.jar
Вы можете видеть, что мы добавили много параметров при запуске, чтобы включить удаленное被调戏
значение.
Шаг четвертый.
Отредактируйте файл Java в вашей локальной IDEA и вставьте адрес нашего сервера (такой же, как адрес приложения) в переменную запуска.
import org.springframework.boot.devtools.RemoteSpringApplication;
/**
* @date 2020/09/19
*/
public class Remote {
public static void main(String[] args) {
RemoteSpringApplication.main(new String[]{"http://localhost:8080"});
}
}
Шаг пятый.
аутентификация. Просто отредактируйте файл, чтобы увидеть эффект, а затем нажмите «Создать».
Ниже приведен скриншот стороны разработки IDEA.
Ниже скриншот сервера. Видно, что сервис перезагружался, но очень быстро.
Listening for remote restart updates on /.~~spring-boot!~/restart
Started MbyeApplication in 1.961 seconds (JVM running for 249.452)
Посетите веб-страницу и убедитесь, что код успешно загружен.
End
На самом деле, spring-boot-devtools не самый мощный. Потому что он будет использовать ClassLoader для перезагрузки файла класса проекта каждый раз. Если ваш файл проекта особенно велик, он также относительно медленный.
Есть лучший инструмент под названиемjrebel
, это действительно инструмент для развития. Более того, его можно использовать в любом проекте Java, а не только в проектах SpringBoot. Это немного тяжело, однако, и это платно. В следующий раз мы представим это, или вы уже испытали это заранее.
Об авторе:Мисс сестра вкус(xjjdog), публичная учетная запись, которая не позволяет программистам идти в обход. Сосредоточьтесь на инфраструктуре и Linux. Десять лет архитектуры, десятки миллиардов ежедневного трафика, обсуждение с вами мира высокой параллелизма, дающие вам другой вкус.