Java Portal | Программирование
12.9K subscribers
1.13K photos
92 videos
36 files
1.01K links
Присоединяйтесь к нашему каналу и погрузитесь в мир для Java-разработчика

Связь: @devmangx

РКН: https://clck.ru/3H4WUg
Download Telegram
Разбор логов при запуске Spring Boot

Когда запускаешь Spring Boot и в консоли пролетают тонны логов - вот что это всё значит:

1. Spring Boot Banner

Сначала появляется ASCII-баннер с версией Spring Boot:

:: Spring Boot :: (v3.3.4)

Он показывает версию приложения и данные JVM.

2. Стартовая информация

Пример строки:

Starting DemoApplication using Java 21 on LAPTOP with PID 4523

Отображает главный класс, версию Java и PID процесса.

3. Активные профили

Если видишь:

The following profiles are active: dev

Значит, загружается application-dev.yml — удобно для конфигов под разные окружения.

4. Инициализация ApplicationContext

Spring создаёт ApplicationContext, сканирует компоненты, конфигурации и автоконфигурации.

Пример лога:

Refreshing org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext

5. Фаза автоконфигурации

Spring Boot подхватывает AutoConfiguration-классы и автоматически связывает бины.

Пример:

Tomcat initialized with port(s): 8080 (http)

Хочешь увидеть детали — запускай с флагом --debug или --trace.

6. Создание и инициализация бинов

Типичный лог:

Initializing Spring DispatcherServlet 'dispatcherServlet'

Это значит, что веб-слой готов принимать запросы.

7. Запуск веб-сервера

В зависимости от стека:

- Tomcat — для Spring MVC
- Netty — для WebFlux

Пример:

Tomcat started on port(s): 8080 (http) with context path ''

8. Метрики старта

Spring Boot 3.x добавил StartupStep-метрики, чтобы отслеживать, на что уходит время при старте (видно, если включён Actuator).

9. Приложение готово

Финальный лог:

Started DemoApplication in 2.345 seconds (JVM running for 2.789)

Контекст полностью загружен, приложение работает.

Как посмотреть всё в реальном времени

Запусти приложение с флагом --debug:

java -jar app.jar --debug

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

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍106
Проект, который я советую каждому разработчику сделать хотя бы раз, написать свой парсер JSON, который превращает строку в нативный объект языка, например словарь.

Формат JSON настолько привычен, что мы просто пользуемся готовыми парсерами и редко задумываемся, как они устроены внутри. Вот основные шаги, если хочешь собрать такой парсер с нуля:

Разобраться со спецификацией JSON.

Написать токенайзер, который выделяет токены из строки (можно использовать Lex).

Определить грамматику JSON по спецификации с помощью Yacc.

Реализовать обработку ошибок, красивый вывод и указание позиции ошибки в строке.

Собрать нативный объект языка — словарь, hashmap и т.д.

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

Если хочешь усложнить задачу — не используй Lex и Yacc, а напиши токенайзер и парсер полностью вручную, специально под JSON, без универсальности.

Сделав такой проект, ты не только поймёшь, как работает JSON, но и:

почему его парсинг считается относительно медленным и затратным
как устроена стадия парсинга в любом компиляторе
насколько всё это интересно, если копнуть глубже

Этот проект реально прокачает твои навыки решения задач. Если решишься, то желаю удачи!

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
12😁5👍2💊2🤔1
Большинство разработчиков пользуются всего парой Git команд.

Вот еще 15, которые сэкономят вам кучу времени.

git stash → Сохранить работу без коммита. Можно прыгать по веткам, не теряя правки.

git reflog → Находит потерянные коммиты. Спасательный круг, если что-то пошло не так с git reset.

git bisect → Двоичный поиск по коммитам, чтобы вычислить баг. Гораздо быстрее ручной проверки.

git rebase -i → Причесывает историю перед пушем. Сквош, перестановка или правка коммитов.

git cherry-pick → Применяет нужные коммиты в другую ветку. Без полноценного merge.

git diff --staged → Показывает, что именно пойдет в коммит. Помогает поймать косяки заранее.

git commit --amend → Поправить последний коммит или добавить забытые файлы.

git reset HEAD~1 → Откатывает последний коммит, но оставляет изменения. Начинаешь заново, ничего не теряя.

git clean -fd → Удаляет все неотслеживаемые файлы и папки. Полная очистка, когда нужно начать на чистую.

git log --oneline --graph → Компактная визуализация истории. Ветки и слияния видно как на ладони.

git blame → Показывает, кто и когда писал каждую строку. Удобно искать момент появления бага.

git show → Детальная инфа по любому коммиту. И изменения, и метаданные.

git remote -v → Список всех удаленных репозиториев. Полезно, чтобы проверить, куда вы пушите.

git fetch --prune → Обновляет информацию о ремоутах и удаляет устаревшие ветки.

git diff branch1..branch2 → Сравнивает две ветки. Видно, что именно в них различается.


👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥95
Подсказка по Java: начиная с Java 9 можно использовать Stream.takeWhile() для удобного «нарезания» списков через стримы. Это простой способ взять элементы, пока выполняется нужное условие, без лишнего кода.

List<Integer> numbers = List.of(1, 2, 3, 4, 5, 6, 7, 8, 9);

Вместо:

List<Integer> result = new ArrayList<>();

for (Integer n : numbers) {
if (n < 5) {
result.add(n);
} else {
break;
}
}
System.out.println(result); // [1, 2, 3, 4]


Вы можете сделать следующее:

result = numbers.stream()
.takeWhile(n -> n < 5)
.toList();
System.out.println(result); // [1, 2, 3, 4]



👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍148
Парень собрал репозиторий, чтобы показать новые встроенные возможности отказоустойчивости в Spring Framework 7. Никаких дополнительных зависимостей вроде spring-retry — все уже под капотом 🤯

Можно использовать декларативную аннотацию Retry, чтобы настроить, как и когда нужно повторять выполнение

Можно написать свой listener, чтобы получить наблюдаемость за разными событиями.

Нужен больше контроля — бери RetryTemplate

Хочешь ограничить число одновременных подключений — используй Concurrent

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥32