воспроизведение сцены
Однажды подросток получил сообщение от фронтенд-одноклассника о том, что интерфейс совместной отладки ненормальный 🙃, подросток вел себя очень спокойно 🙂, потому что такие вещи слишком распространены 😑. Поэтому, спросив подробности, я начал открывать свой собственный код, чтобы найти проблему, и нашел ее в течение пяти минут. После того, как подросток модифицировал код, он остановил и перезапустил локально запущенный проект. Поскольку текущий серверный проект представляет собой огромное монолитное приложение, для его запуска требуется время.Три-четыре минуты, поэтому подросток достал свой мобильный телефон и начал освежать круг друзей. кисть кисть (Потребовалось десять минут, не осознавая этого из-за отвлечения внимания.) внезапно понял, что проект был перезапущен, и уведомил фронтенд-студентов, чтобы они проверили эффект.
анализировать проблему
Приведенный выше сценарий может быть одинаковым для многих разработчиков, и во время разработки проекты часто изменяются. Когда мы закончим изменять код или другие файлы, мы перезапустим проект, чтобы проверить, действительно ли модификация вступает в силу (не обращайте внимания на тестовый код, который мы написали здесь), чтобы клиентский интерфейс или другие клиенты могли использовать нашу модификацию. Но по незнанию этот процесс потратил впустую много нашего времени,Даже заставили нас отвлечь (открыть соцсети, посмотреть новости, пообщаться с коллегами), эти проблемы представляют большую угрозу для нашей производительности.
spring-boot-devtools
Есть ли способ сделать так, чтобы изменения в проекте вступили в силу быстро, сэкономив нам время, которое мы могли бы использовать? К счастью, есть инструмент, способный решить текущие проблемы, и это**Spring Boot Dev Tools**
.
Введение
Вы можете сказать, что не важно знать, как работают Spring Boot Dev Tools, но, поскольку в процессе разработки так много сложностей, полезно знать, как работают Spring Boot Dev Tools.
Spring Boot Dev Tools подключается к загрузчику классов Spring Boot, чтобы предоставить способ перезапустить контекст приложения по запросу или перезагрузить измененные статические файлы без перезапуска всего приложения.
Для этого Spring Boot Dev Tools разделит путь к классам приложения и назначит его двум разным загрузчикам классов:
- загрузчик базовых классов: содержит некоторые неизменяемые классы или файлы, которые вряд ли будут изменены, например JAR-файлы Spring Boot или сторонние библиотеки.
- перезапустить загрузчик классов: Содержит файлы приложения, которые будут часто меняться в процессе разработки проекта.
После перезапуска приложения существующиеперезапустить загрузчик классовбудет выброшен, новыйперезапустить загрузчик классовбудет активирован. Этот подход означает, что перезапуск приложений обычно намного быстрее, чем «холодный перезапуск», потому чтозагрузчик базового классаНезаметно и всегда рядом.
импортировать зависимости
когда мы используемintellij IDEAизSpring InitializrПри создании проекта,Spring Initializrобеспечивает встроенныйSpring Boot Dev ToolsОпция зависимости, нам просто нужно выбрать ее.
Spring Initializrвведен вSpring Boot Dev Tools
Представлен в проекте MavenSpring Boot Dev Tools
Представлен в файле pom.xml проекта.Spring Boot Dev Toolsпросто зависеть от
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
Демонстрация проекта
одиночный модуль
Добавьте в проект простой контроллер
@SpringBootApplication
public class DevToolApplication {
public static void main(String[] args) {
SpringApplication.run(DevToolApplication.class, args);
}
@RestController
public static class HelloWorld {
@GetMapping("test")
public ResponseEntity<?> getTest() {
return ResponseEntity.ok("hello world");
}
}
}
Запустите проект, посетитеhttp://localhost:8080/test возвращает следующее:
Мы просто модифицируем код
@RestController
public static class HelloWorld {
@GetMapping("test")
public ResponseEntity<?> getTest() {
return ResponseEntity.ok("hello world after change file");
}
}
Команда Runmvn compile
, вернуться после запускаhttp://localhost:8080/test
Как видите, наши изменения вступили в силу.
многомодульный
Предположим, что теперь наш проект ссылается на другие проекты как на подмодули.
<dependency>
<groupId>org.example</groupId>
<artifactId>untitled</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
Нам нужно внести изменения в вышеуказанные подмодули, чтобы они вступали в силу сразу же при запуске программы.
Использование в многомодульных проектахSpring Boot Dev ToolsЭто немного сложнее, чем проект с одним модулем, потому что в проекте с несколькими модулями основной модуль имеет ссылочное отношение к подмодулю, а основной модуль запускает приложение, ссылаясь на jar-файл подмодуля во время выполнения. к предыдущемуSpring Boot Dev ToolsПринцип, по которому загрузка файла jar будет относиться кзагрузчик базового класса, поэтому согласно текущей практике модификация подмодуля не может вступить в силу немедленно.
ноSpring Boot Dev ToolsОбеспечивает поддержку многомодульных проектов.Нам нужно только добавить простую конфигурацию, чтобы реализовать немедленный эффект модификации многомодульных проектов.
в проекте/resources
создан вMETA-INF/spring-devtools.properties
файл и добавить конфигурацию
restart.include.projectcommon=/untitled-1.0-SNAPSHOT.jar
Приведенная выше конфигурация показывает, чтоперезапустить загрузчик классовПри перезапуске будут загружены последние зависимости подмодуля, так что модификация подмодуля вступит в силу немедленно.
Теперь в подмодуле существует следующий класс
public class DemoA {
private String name;
public String getName() {
return name;
}
public DemoA setName(String name) {
this.name = name+"cgsj111";
return this;
}
}
На указанный выше класс ссылаются в основном модуле.
@RestController
public static class HelloWorld {
@GetMapping("test")
public ResponseEntity<?> getTest() {
DemoA demo = new DemoA();
demo.setName("demo name");
return ResponseEntity.ok(demo);
}
}
Запустите приложение в этот момент, доступhttp://localhost:8080/test
Вы видите, что ответ возвращается нормально, в это время мы модифицируем код подмодуля.
public class DemoA {
private String name;
public String getName() {
return name;
}
public DemoA setName(String name) {
this.name = name+"cgsj111 After Change";
return this;
}
}
Затем в основном модуле выполните команду mvn compile
, затем снова войдите в интерфейс
Видно, что модификация подмодуля сразу вступила в силу в основном модуле.
Удаленная отладка
Spring Boot Dev ToolsПоказанная эффективность и удобство не ограничиваются только локальной отладкой, но также имеют хорошую поддержку удаленной отладки. Удаленная поддержка включается выборочно, поскольку ее включение может представлять угрозу безопасности. Его следует включать только при работе в доверенной сети или с защитой SSL. Если ни один из этих вариантов не соблюдается, вам не следует использовать удаленную поддержку DevTools. Вы никогда не должны включать его в производство.
Чтобы включить его, вам нужно убедиться, что devtools включен в сборку, измените его на следующую конфигурацию:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!--确保项目打包是将Devtools包含进去-->
<excludeDevtools>false</excludeDevtools>
</configuration>
</plugin>
</plugins>
</build>
Затем вам нужно установить свойство spring.devtools.remote.secret. Как и любой важный пароль или секрет, это значение должно быть уникальным и надежным, чтобы его нельзя было угадать или подобрать методом грубой силы, например, вapplication.properties
Средние настройки:
spring.devtools.remote.secret=cgsj8377
Поддержка удаленных инструментов разработки разделена на две части: конечная точка на стороне сервера, которая принимает соединения, и приложение на стороне клиента, работающее в среде IDE. настраиватьspring.devtools.remote.secret
После установки свойства серверный компонент включается автоматически, а клиентский компонент необходимо запускать вручную.
Демонстрация отладки
Запустите команду в папке проектаmvn package
Создайте файл jar и разверните файл jar на сервере (здесь мы моделируем удаленное развертывание, запустив пакет jar локально). Затем настройте IDE следующим образом (в качестве примера возьмем Intellij IDEA)
Как показано выше, мы добавили пусковую установку, и класс запускаorg.springframework.boot.devtools.RemoteSpringApplication
, и передать параметр программы, чтобы указать адрес удаленного приложения, здесь автор экспериментирует на этой машине, поэтому это локальный адрес.
Далее запускаем только что созданный лаунчер
Журнал запуска выглядит следующим образом
Измените код на следующий
@RestController
public static class HelloWorld {
@GetMapping("test")
public ResponseEntity<?> getTest() {
DemoA demo = new DemoA();
demo.setName("remote test");
return ResponseEntity.ok(demo);
}
}
затем запустите командуmvn compile
, вы можете видеть, что наши изменения сразу же вступают в силу в запущенной программе
Суммировать
В нашем ежедневном процессе разработки всегда есть различные «ожидания», и эти моменты сильно повлияют на эффективность и внимание разработчиков. Появление Developer Tools снимает эту проблему, делая отладку приложений более удобной и эффективной. Следует отметить, что нам нужно сделатьmvn compile
чтобы собственный код можно было скомпилировать в файлы байт-кода, понятные программе.
Пример кода для этой статьи:git ee.com/количество guest8chen/…
Ссылки на эту статью:
docs.spring.IO/весенняя загрузка…
отражатель ing.IO/spring-boot…
🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟
Добро пожаловать в блог автора:blog.dongxishaonian.tech