Ускорьте разработку приложений SpringBoot, официальный артефакт горячего развертывания действительно захватывающий!

Spring Boot Java
Ускорьте разработку приложений SpringBoot, официальный артефакт горячего развертывания действительно захватывающий!

Адрес фактического центра электронной коммерции SpringBoot (40k+star):GitHub.com/macro-positive/…

Резюме

При использовании SpringBoot для разработки приложений необходимо перезапустить после изменения кода, чтобы изменения вступили в силу. Если ваше приложение достаточно большое, его запуск может занять несколько минут. Есть ли способ ускорить процесс запуска, чтобы мы могли более эффективно разрабатывать код приложения? Сегодня я хотел бы порекомендовать официальный инструмент горячего развертывания SpringBoot.spring-boot-devtools, После изменения кода приложение может быть быстро и автоматически перезапущено!

spring-boot-devtoolsВведение

Официальный инструмент разработки SpringBoot, если ваше приложение интегрирует его, вы можете добиться горячего развертывания и удаленной отладки.

Принцип реализации

Почему приложение запускается быстрее с этим инструментом? В основном потому, что он использует два разных загрузчика классов. Загрузчик базовых классов используется для загрузки классов, которые не будут изменяться (например, классы в сторонних библиотеках), а загрузчик классов перезапуска используется для загрузки классов в вашем приложении. При запуске приложения классы в загрузчике классов перезапуска будут заменены, а это значит, что перезапуски будут быстрее, чем холодные перезапуски!

горячее развертывание

Далее мы интегрируем инструменты разработки, чтобы продемонстрировать функцию горячего развертывания.

  • Прежде всего, вам нужноpom.xmlВ файл добавить зависимости devtools;
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <optional>true</optional>
</dependency>
  • Для облегчения тестирования мы добавили следующие тестовые интерфейсы к проекту;
/**
 * Created by macro on 2021/3/25.
 */
@Api(tags = "TestController", description = "SpringBoot Dev Tools测试")
@Controller
@RequestMapping("/test")
public class TestController {

    @ApiOperation("测试修改")
    @RequestMapping(value = "/first", method = RequestMethod.GET)
    @ResponseBody
    public CommonResult first() {
        String message = "返回消息";
        return CommonResult.success(null,message);
    }
}
  • Затем запустите проект и получите доступ к интерфейсу через Swagger после успешного запуска.Возвращенный результат выглядит следующим образом, а адрес доступа:http://localhost:8088/swagger-ui.html
{
  "code": 200,
  "message": "返回消息",
  "data": null
}
  • Поскольку devtools автоматически перезапускает проект при сборке проекта, а IDEA не использует автоматическую сборку по умолчанию, мы можем изменить конфигурацию запуска приложения, чтобы настроить автоматическую сборку проекта, когда IDEA теряет фокус;

  • Измените код в контроллере, просто изменитеmessageПеременная;
/**
 * Created by macro on 2021/3/25.
 */
@Api(tags = "TestController", description = "SpringBoot Dev Tools测试")
@Controller
@RequestMapping("/test")
public class TestController {

    @ApiOperation("测试修改")
    @RequestMapping(value = "/first", method = RequestMethod.GET)
    @ResponseBody
    public CommonResult first() {
        String message = "返回消息(已修改)";
        return CommonResult.success(null,message);
    }
}
  • После потери фокуса дождитесь автоматической сборки проекта, а в интерфейсе доступа в это время возникает проблема 404;
{
  "timestamp": "2021-03-29T07:09:05.415+00:00",
  "status": 404,
  "error": "Not Found",
  "message": "No message available",
  "path": "/test/first"
}
  • Из-за разницы между временем обнаружения devtools и временем, необходимым для компиляции IDEA, когда IDEA не была скомпилирована, devtools перезапускает приложение, что приводит к этой проблеме.application.ymlФайл конфигурации, добавьте следующую конфигурацию;
spring:
  devtools:
    restart:
      poll-interval: 2s
      quiet-period: 1s
  • В это время снова получите доступ к тестовому интерфейсу, содержимое дисплея выглядит следующим образом, и измененный код был применен автоматически.
{
  "code": 200,
  "message": "返回消息(已修改)",
  "data": null
}

Удаленная отладка

В дополнение к поддержке горячего развертывания, devtools также поддерживает удаленную отладку.Далее мы развертываем приложение в контейнере Docker, а затем пробуем удаленную отладку!

  • Поскольку SpringBoot по умолчанию не содержит devtools, нам нужно сначала изменить его.pom.xml;
<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <!--打包时不排除Devtools-->
        <excludeDevtools>false</excludeDevtools>
    </configuration>
</plugin>
  • следующая потребностьapplication.ymlФайл добавить код удаленного доступа devtools;
spring:
  devtools:
    remote:
      secret: macro666
  • Затем упакуйте проект в образ Docker и запустите его с помощью следующей команды;
docker run -p 8088:8088 --name mall-tiny-devtools \
--link mysql:db \
-v /etc/localtime:/etc/localtime \
-v /mydata/app/mall-tiny/logs:/var/logs \
-d mall-tiny/mall-tiny-devtools:1.0-SNAPSHOT
  • Добавьте конфигурацию запуска и измените класс запуска наorg.springframework.boot.devtools.RemoteSpringApplication, информация о конфигурации выглядит следующим образом;

  • Запустите настройку, и консоль выведет следующие результаты, указывающие на то, что удаленное подключение выполнено успешно;
2021-03-29 15:49:50.991  INFO 7848 --- [           main] o.s.b.devtools.RemoteSpringApplication   : Starting RemoteSpringApplication v2.3.0.RELEASE on DESKTOP-5NIMJ19 with PID 7848
2021-03-29 15:49:51.003  INFO 7848 --- [           main] o.s.b.devtools.RemoteSpringApplication   : No active profile set, falling back to default profiles: default
2021-03-29 15:49:51.664  WARN 7848 --- [           main] o.s.b.d.r.c.RemoteClientConfiguration    : The connection to http://192.168.5.78:8088 is insecure. You should use a URL starting with 'https://'.
2021-03-29 15:49:52.024  INFO 7848 --- [           main] o.s.b.d.a.OptionalLiveReloadServer       : LiveReload server is running on port 35729
2021-03-29 15:49:52.055  INFO 7848 --- [           main] o.s.b.devtools.RemoteSpringApplication   : Started RemoteSpringApplication in 2.52 seconds (JVM running for 4.236)
  • Далее мы снова модифицируем тестовый код в Контроллере, просто модифицируемmessageПеременная;
/**
 * Created by macro on 2021/3/25.
 */
@Api(tags = "TestController", description = "SpringBoot Dev Tools测试")
@Controller
@RequestMapping("/test")
public class TestController {

    @ApiOperation("测试修改")
    @RequestMapping(value = "/first", method = RequestMethod.GET)
    @ResponseBody
    public CommonResult first() {
        String message = "返回消息(远程调试)";
        return CommonResult.success(null,message);
    }
}
  • Если удаленная отладка создается автоматически, удаленная служба будет часто перезапускаться.В настоящее время мы можем использовать IDEA для сборки вручную, а кнопку сборки можно найти в контекстном меню проекта;

  • После успешной сборки можно обнаружить, что удаленная служба автоматически перезапустится, и будет применен измененный код, и при доступе к тестовому интерфейсу будет возвращена следующая информация:
{
  "code": 200,
  "message": "返回消息(远程调试)",
  "data": null
}

Суммировать

Хотя для горячего развертывания можно использовать официальные инструменты разработки SpringBoot, этот метод больше похож на горячий перезапуск.Если вам нужно более быстрое горячее развертывание, вы можете использовать JRebel.

Адрес исходного кода проекта

GitHub.com/macro-positive/…

Эта статьяGitHubGitHub.com/macro-positive/…Он был записан, приветствую всех на Star!