задний план
С увеличением количества промежуточного программного обеспечения, внедряемого в процессе разработки проекта, для запуска проекта Spring Boot требуется время. постепенно увеличивать.
Автор находится в«Spring Boot 2.4.0 официально общедоступен, полностью поддерживает облачные технологии»[1]Нашел в комментариях к статье
- Экосистема Spring сложна, и неофициальные плагины не реализуются строго в соответствии с официальными стандартами. Например, в аннотации @Configuration указано, что атрибут proxyBeanMethods должен быть включен по умолчанию, в общих случаях рекомендуется закрывать его вручную для повышения производительности. Автор отмечает, что большинство неофициальных плагинов не вводят это свойство. Существует множество подобных стратегий оптимизации (рекомендуется прочитать исторический блог автора), но они часто игнорируются разработчиками, в результате чего использование этого плагина повлияет на эффективность запуска приложения.
- В процессе запуска присутствует много последовательной логики инициализации, что серьезно влияет на эффективность запуска. НапримерПараметры инициализации пула соединений с базой данных Druid являются необоснованными, что приводит к медленному созданию физических ссылок, что влияет на эффективность запуска.[2].
По двум вышеуказанным пунктам я думаю, что медленный запуск SpringBoot имеет мало общего с самим фреймворком и зависит от способностей разработчика. Как мы можем точно проанализировать процесс запуска во время разработки и найти каждую трудоемкую операцию? Этого невозможно достичь только из измерения журнала запуска, Spring Boot 2.4.0 предоставляет конечную точку для мониторинга процесса запуска, что очень удобно для разработчиков, чтобы наблюдать за процессом инициализации и затратами времени каждого компонента в процессе разработки.
Начать
- представлять
actuator
полагаться
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
- Воздействие конфигурации
startup
конечная точка
management:
endpoints:
web:
exposure:
include: startup
- Класс запуска Main объявляет буферный пул.Обратите внимание, что если приложение имеет много зависимостей, рекомендуется установить для параметра емкости большее значение и максимально сохранить все журналы мониторинга.
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
// 建议仅在开发或者排除时开启此配置
new SpringApplicationBuilder(DemoApplication.class)
.applicationStartup(new BufferingApplicationStartup(20480))
.run(args);
}
}
- Получить данные запуска, запрос POST
/actuator/startup
Конечная точка возвращает данные мониторинга
⋊> ~ curl -XPOST http://localhost:8080/actuator/startup 11:49:51
{"springBootVersion":"2.4.0","timeline":{"startTime":"2020-12-04T01:38:15.028114Z","events":[{"startupStep":{"name":"spring.event.invoke-listener","id":296,"parentId":0,"tags":[{"key":"event","value":"ServletRequestHandledEvent: url=[/actuator/startup]; client=[0:0:0:0:0:0:0:1]; method=[POST]; servlet=[dispatcherServlet]; session=[null]; user=[null]; time=[83ms]; status=[OK]"},{"key":"listener","value":"org.springframework.boot.context.config.DelegatingApplicationListener@2053d869"}]},"startTime":"2020-12-04T01:38:28.402870279Z","endTime":"2020-12-04T01:38:28.402929390Z","duration":"PT0.000059111S"}]}}
Прецедент
- Добавьте RestTemplate Bean и смоделируйте время инициализации
@Configuration(proxyBeanMethods = false)
public class DemoConfiguration {
@Bean
public RestTemplate restTemplate() throws InterruptedException {
// 模拟初始化过程中的耗时操作
Thread.sleep(5000);
return new RestTemplate();
}
}
- Получите журнал конечной точки и точно выведите трудоемкую инициализацию RestTemplate во время запуска.
Сортировать по времени
Интерфейс конечной точки не предоставляет связанных интерфейсов, но отображается в порядке начальной загрузки. Нет необходимости вручную обрабатывать такие данные, что можно сделать с помощьюwoohoo.be JSON.com/JSON/JSON так что…онлайн сортировка форматов
Выберите сортировку по времени
Добро пожаловать на перепечатку
использованная литература
[1]Spring Boot 2.4: https://www.oschina.net/news/120443/spring-boot-2-4-0-released
[2]Druid : https://github.com/alibaba/druid/issues/1368