Java библиотека – Telegram
Java библиотека
31.5K subscribers
2.37K photos
90 videos
10 files
2.18K links
Книги, статьи, мемы и многое другое для Java программиста!

По сотрудничеству и рекламе: @NadikaKir

Канал в перечне РКН: https://vk.cc/cJrT4A

Мы на бирже: https://telega.in/c/javalib/

Сообщество VK https://vk.com/javatutorial
Download Telegram
👩‍💻 Просто о сложном: Spring Boot

Spring Boot — это не «новый фреймворк», а надстройка над Spring, которая убирает рутину и ускоряет разработку.

В обычном Spring нужно было вручную конфигурировать всё: от DataSource до DispatcherServlet. В Boot это делается автоматически через автоконфигурацию.

🟢Как работает автоконфигурация

Spring Boot сканирует зависимости и classpath, а затем подключает нужные бины:

— Если у вас есть spring-boot-starter-data-jpa, Boot автоматически создаст EntityManagerFactory, DataSource, транзакционный менеджер.

— Если добавлен spring-boot-starter-web, он поднимет встроенный Tomcat/Jetty и зарегистрирует контроллеры. И так далее.

Магия кроется в аннотации @EnableAutoConfiguration (включается через @SpringBootApplication). Она загружает META-INF/spring.factories → список классов-конфигов → каждый проверяет условия @ConditionalOnClass, @ConditionalOnMissingBean и решает: активироваться или нет.

💡 Почему это работает так гладко

Потому что в Boot сотни готовых конфигураций «на все случаи жизни».

Фактически, это огромная библиотека «если увидишь X — настрой Y».

👀 Подводный слой магии

— Черный ящик

Легко забыть, что именно сконфигурировал Boot. Иногда приходится «копать» в автоконфигурацию, чтобы понять, какой бин реально используется.

— Избыточные зависимости


Подключив Starter, можно случайно притащить половину экосистемы Spring. Это увеличивает время старта и усложняет дебаг.

— Конфликт настроек


Собственная конфигурация может пересечься с автоконфигурацией.

⚡️ Хорошая практика

— Не доверяйте «чёрному ящику»: при старте приложения смотрите Spring Boot Actuator и логи автоконфигурации.

— Знайте про --debug при старте: он показывает, какие автоконфигурации включены или отключены.

— В продакшене лучше контролировать, какие именно стартеры вы тянете. Иногда spring-boot-starter-web приносит в проект в три раза больше, чем реально нужно.

🎯 Итог

Spring Boot — это ускоритель, но не магия. Его сила в автоконфигурациях, а слабость в том, что легко потерять контроль.

Понимание того, как работает @EnableAutoConfiguration и условия @Conditional, отличает разработчика, который «просто пишет на Boot», от того, кто реально управляет приложением.

Подписывайся на наш канал в Max 🟪
Please open Telegram to view this post
VIEW IN TELEGRAM
13👍8🔥5
Ты уже настроил своих AI-агентов? 🤖

Приглашаем на бесплатный вебинар от OTUS «Обзор AI-технологий для разработчиков: от идей до рабочих решений»: https://vk.cc/cQXINh

Что будет, когда отладка — не ад, а код пишется в разы быстрее?

Мы покажем:
• Как встроить AI в ваш CI/CD и автоматизировать рутину
• Инструменты для генерации кода, тестов и даже документации
• Реальные кейсы использования LLM в продакшне

Спикер — Алексей Романовский, разработчик с 15-летним опытом. Он не теоретик, а практик, который уже прошел путь интеграции AI в рабочие процессы.

Важно: это открытый урок полного курса «AI для разработчиков». Места в группе тают быстрее, чем кэш при неправильной инвалидации — успевайте в группу ноября по скидке!

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
2👍2🔥1😁1
🖥 Как ускорить Spring Boot при старте: spring-context-indexer

Как вы знаете, при старте Spring Boot-приложения много времени уходит на classpath scanning. Даже если вы используете @ComponentScan, Spring всё равно перебирает кучу классов в поиске бин-кандидатов. Это рефлексивно и медленно.

📌 Есть способ это оптимизировать — spring-context-indexer.

🔧 Что делать

1. Добавьте зависимость в pom.xml:


<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-indexer</artifactId>
<version>6.1.3</version> <!-- актуальная для Spring Boot 3 -->
<optional>true</optional>
</dependency>


2. Всё! Spring Boot на этапе компиляции сгенерирует индекс классов с аннотациями (@Component, @Service, @Repository, и т.п.) в META-INF/spring.components.

3. При старте приложения Spring сначала смотрит в индекс, а не сканирует classpath целиком.

💡 Полезно, если:

- У вас много модулей;
- Вы используете fat JAR;
- Приложение долго стартует и важна скорость.

⚠️ Важно

- Работает только с аннотациями Spring, не с кастомными;
- Не забудьте включить annotation processing в IDE (особенно в IntelliJ: Settings → Build, Execution, Deployment → Compiler → Annotation Processors).

📊 Профит: в крупных проектах - до 30–50% ускорения старта.

Подписывайся на наш канал в Max 🟪
Please open Telegram to view this post
VIEW IN TELEGRAM
👍135🔥2😁1
👩‍💻 Spring Security: как работает @PreAuthorize и зачем он нужен

В продакшн-коде часто возникает задача ограничить доступ к методам сервиса или контроллера. Делать это вручную — значит плодить дублирование и путать бизнес-логику с проверками. Для этого в Spring Security есть аннотация @PreAuthorize.

🟢Как это работает

1. Аннотация вешается на метод (контроллер или сервис).

2. При вызове метода Spring Security перехватывает обращение и проверяет условие, указанное в аннотации.

3. Условие описывается на языке SpEL (Spring Expression Language), где доступно:

🔘authentication — текущий объект аутентификации;
🔘principal — данные текущего пользователя;
🔘#id, #dto и т.д. — аргументы метода, к которым можно обратиться напрямую.

Пример:
@PreAuthorize("hasRole('ADMIN')")
public void deleteUser(Long id) { ... }


→ метод вызовется только для пользователей с ролью ADMIN.

🟢Что можно писать внутри

— Проверка ролей и прав
hasRole('USER'), hasAnyRole('ADMIN','MODERATOR')

hasAuthority('SCOPE_read') (актуально при работе с OAuth2)


— Собственные условия
@PreAuthorize("#id == authentication.principal.id")
public UserProfile getProfile(Long id) { ... }


→ Здесь доступ только к своему профилю.

— Комбинации условий

Логика пишется прямо в SpEL:
@PreAuthorize("hasRole('ADMIN') or @securityService.isOwner(#docId)")
public Document update(Long docId) { ... }


— Сервисы внутри выражений

В выражение можно подключать свои бины:
@PreAuthorize("@reviewSecurity.isOwner(#id, authentication)")
public Review update(Long id) { ... }


→ бин reviewSecurity должен быть в контексте Spring и возвращать true/false.

🟢Зачем это нужно

— Не надо вручную писать проверки в каждом методе.

— Авторизация централизована и читается прямо на уровне API.

— Условия можно вынести в отдельный сервис, чтобы не захламлять аннотацию.

👉 В итоге @PreAuthorize — это не только про роли, а про гибкий DSL проверки доступа, который можно расширять под проект: от банальной проверки ролей до бизнес-логики уровня "пользователь может редактировать только свои документы, если они ещё не опубликованы".

Подписывайся на наш канал в Max 🟪
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🔥92
5 ноября(уже завтра!) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Java-разработчика.

Как это будет:
📂 Илья Аров, старший разработчик в МТС, будет задавать реальные вопросы и задачи разработчику-добровольцу
📂 Илья будет комментировать каждый ответ респондента, чтобы дать понять чего от вас ожидает собеседующий на интервью
📂 В конце можно будет задать любой вопрос Илье

Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Java-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы.

Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_sh_bot

Реклама.
О рекламодателе.
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍2🔥2
Что такое Serial Garbage Collector?

Serial GC — это однопоточный сборщик мусора, работающий по принципу "Stop-the-World". Он останавливает выполнение всех потоков во время сборки мусора и использует копирующий алгоритм для молодых поколений (Young Gen) и компактирующий алгоритм для старших (Old Gen).

🟢 Как работает

1️⃣ В молодом поколении (Minor GC) используется копирующая стратегия: выжившие объекты перемещаются из Eden в Survivor, а из Survivor в Old Gen.
2️⃣ В старом поколении (Major GC / Full GC) выполняется уплотнение памяти для уменьшения фрагментации.
3️⃣ Так как GC работает в одном потоке, во время сборки остановка приложения неизбежна.

🟢 Когда использовать

В одноядерных системах или при ограниченных ресурсах, где многопоточный GC создаст больше нагрузки.
В маленьких JVM (до 1-2 ГБ памяти), где G1 или Parallel GC будут избыточны.
В приложениях без жестких требований к паузам, например, в небольших утилитах или CLI-инструментах.

Подписывайся на наш канал в Max 🟪
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥81
🧑‍💻 Магия IntelliJ IDEA

Все знают Ctrl + Alt + L (форматирование кода), но мало кто знает это сочетание:

Ctrl + Alt + Shift + L → Гибкое форматирование

🟢 Зачем это нужно

— Позволяет выбрать, что именно форматировать: весь файл, выделенный код или даже только измененные строки.
— Можно отключить автоформатирование аннотаций, импортов или пробелов, если не хотите, чтобы IDEA ломала ваш стиль.
— Полезно, если работаете в команде с жесткими code style правилами, можно форматировать только нужные части, не трогая остальной код.

🟢 Дополнительные трюки

— Выделите код, затем Ctrl + Alt + Shift + L, чтобы форматировать только его.
— Используйте Settings → Editor → Code Style, чтобы настроить форматирование под себя.

Подписывайся на наш канал в Max 🟪
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥74
Чек-лист: эффективная работа с многопоточностью

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

🟢 Синхронизация

✓ Избегайте synchronized для долгих операций
✓ Используйте ReentrantLock для гибкой блокировки
✓ Следите за возможностью deadlock

🟢 Исполнители (Executors)

✓ FixedThreadPool подходит, когда количество потоков заранее известно и ограничено
✓ CachedThreadPool динамически создает потоки, но может привести к их неконтролируемому росту
✓ ForkJoinPool для задач, разбиваемых на подзадачи

🟢 Коллекции и очереди

✓ ConcurrentHashMap потокобезопасная альтернатива HashMap, но не подходит для сценариев с частыми изменениями
✓ BlockingQueue для потокобезопасных очередей
✓ CopyOnWriteArrayList хорош при редких изменениях списка, но ⚠️ медленный при частых модификациях (из-за копирования)

🟢 Работа с Future & CompletableFuture

✓ Используйте CompletableFuture для асинхронных операций вместо Future
✓ thenApply() и thenCompose() позволяют строить цепочки вызовов без блокировки
✓ exceptionally() для обработка ошибок без использования try-catch в коде

Автоматизируйте проверку кода с помощью FindBugs, SonarQube и Checkstyle.

Какие задачи на проекте решаете с помощью многопоточки?

Подписывайся на наш канал в Max 🟪
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍4🔥2
Работаете с PostgreSQL и хотите забыть про простои и потери данных? 🤔
Не хотите оказаться в ситуации “руками переключать мастера” в 3 ночи?
Этот практикум OTUS для вас! 6 ноября в 20:00 - бесплатно по записи.

Разберем вместе с Senior Developer Unlimint:
Как устроен Patroni и почему его выбирают для High Availability
Как настроить кластеры Postgres, чтобы пережить любой фейловер без паники Демонстрация настройки кластера — всё покажем на живых примерах
Как избежать split-brain, не “запилить” себе геморроя с Etcd/Consul
Что мониторить, как обновлять, как спасать кластер после сбоев

Только живой разбор, без воды и маркетингового бла-бла.
Спикер: Андрей Поляков, Senior Developer в Unlimint

🎁Бонусы для участников:
Скидка 7% на любой курс OTUS
Видео-разбор: Мониторинг в highload-проектах
Чек-лист: 5 частых ошибок в отказоустойчивых хранилищах

Запишись сейчас — чтобы не искать решение в 3 часа ночи, когда что-то пойдет не так. Увидимся на эфире: https://tglink.io/fdd0de15fa18


Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963. erid: 2W5zFH6UaHv
3👍2🔥2
📚 Java & Related Concepts — полный гайд по Java-экосистеме. Этот репозиторий представляет собой целую энциклопедию для Java-разработчиков. Автор структурировал материал от основ языка до продвинутых тем: многопоточность, проектирование систем, алгоритмы и даже Kotlin с Android-разработкой.

Проект имеет полезные разделы с примерами кода: от классических паттернов вроде Singleton до задач на динамическое программирование. Для тех, кто готовится к собеседованиям, есть подборка LeetCode-шаблонов и реальных interview-задач.

🖥 GitHub

Подписывайся на наш канал в Max 🟪
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥41
👩‍💻 Как настроить Spring Security с кастомной формой логина

Безопасность — базовая вещь. Spring Security по умолчанию кидает вас в дефолтную форму логина. Но в реальности — нужна своя, кастомная.

1️⃣ Добавьте зависимость
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>


2️⃣ Создайте SecurityConfig
@Configuration
@EnableWebSecurity
public class SecurityConfig {

@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(auth -> auth
.requestMatchers("/login", "/css/**").permitAll()
.anyRequest().authenticated()
)
.formLogin(form -> form
.loginPage("/login")
.defaultSuccessUrl("/dashboard", true)
.permitAll()
)
.logout(logout -> logout
.logoutSuccessUrl("/login?logout")
);

return http.build();
}

@Bean
public UserDetailsService userDetailsService() {
var user = User.withUsername("admin")
.password("{noop}admin123") // Для простоты, без шифрования
.roles("ADMIN")
.build();
return new InMemoryUserDetailsManager(user);
}
}


3️⃣ Создайте кастомную HTML-форму

src/main/resources/templates/login.html (если используете Thymeleaf):
<!DOCTYPE html>
<html>
<head><noscript>Login</noscript></head>
<body>
<h2>Login</h2>
<form method="post" action="/login">
<label>Username: <input type="text" name="username" /></label><br/>
<label>Password: <input type="password" name="password" /></label><br/>
<button type="submit">Login</button>
</form>
</body>
</html>


4️⃣ Реализуете контроллер
@RestController
public class DashboardController {

@GetMapping("/dashboard")
public String dashboard() {
return "Welcome to the dashboard!";
}
}


Подписывайся на наш канал в Max 🟪
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍6🔥5
Открытая трансляция главного зала HighLoad++ 2025!

🖐️ Подключайтесь и слушайте доклады от спикеров MTС Web Services (MWS), VK Tech, Яндекса, Т-Банка, СберТеха и других компаний.

HighLoad++ 2025 — это конференция, которая определяет будущее высоконагруженных систем.

📍6 и 7 ноября все желающие могут бесплатно посмотреть онлайн-трансляцию главного зала. Открытую трансляцию мы организовали совместно с генеральным партнером конференции — МТС Web Services (MWS).

МТС Web Services (MWS) — бигтех-компания, предоставляющая облачные и Al-сервисы, а также платформенные решения под задачи бизнеса: от работы с данными до разработки продуктов и оптимизации бизнес-процессов.

Как всегда, в главном зале — топовые эксперты и самые актуальные темы.

Подробности и расписание на сайте
3👍2🔥2
👩‍💻 Интеграция брокеров сообщений в Spring Boot с AI

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

📝 Промпт:
Generate a Spring Boot service that integrates with [Kafka/RabbitMQ] to handle asynchronous message processing for [описание бизнес-задачи]. 
Include configuration, producer, and consumer code.
Ensure reliability with retry mechanisms, message acknowledgment, and error handling.
Use Spring Cloud Stream or native client APIs. Explain architectural choices and trade-offs.


💡 Дополнительные возможности:

— Добавьте Dead Letter Queue (DLQ) для обработки неуспешных сообщений
— Настройте observability (Micrometer + Prometheus/Grafana) для мониторинга очередей

Подписывайся на наш канал в Max 🟪
Please open Telegram to view this post
VIEW IN TELEGRAM
👍52🔥2
🎥 Открытый урок «Наблюдаемость микросервиса: метрики + Prometheus/Grafana».

🗓 11 ноября в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса
«Java Developer. Advanced».

Что будет на вебинаре:

✔️ Полезные метрики для микросервисов: технические и продуктовые; типовые анти-метрики.
✔️Интеграция Spring Actuator/Micrometer и экспорт /actuator/prometheus.
✔️ Сбор в Prometheus: таргеты, ретенция, базовые правила алертинга.
✔️ Дашборды «для разработчика» в Grafana: структура панелей, аннотации, drill-down.

В результате вебинара вы:
- Сможете выделять действительно важные метрики, подключить Actuator/Micrometer, настроить сбор в Prometheus и собрать базовый дашборд в Grafana.

Кому будет интересно:
Java backend-разработчикам, DevOps/SRE и инженерам, отвечающим за эксплуатацию микросервисов.

🔗 Ссылка на регистрацию: https://vk.cc/cR2r3Q

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
8👍2🔥2
🧑‍💻 Магия IntelliJ IDEA

Работаете в большом Java-проекте и боитесь, что при переименовании метода или переменной что-то сломаете? IntelliJ IDEA умеет безопасно и быстро переименовывать элементы кода с помощью Shift + F6.

🟢Зачем это нужно

— Вместо ручного поиска и замены по всему проекту IDEA обновит все ссылки на метод, переменную или класс автоматически.
— Переименование учитывает контекст — не затронет одноимённые элементы в других частях кода.
— Работает со всеми элементами: методами, классами, переменными, параметрами и даже с ресурсами.

🟢Как использовать

— Наведите курсор на имя метода, класса или переменной, которую хотите переименовать.
— Нажмите Shift + F6.
— Введите новое имя. IDEA покажет, где будет произведено переименование.
— Подтвердите и все ссылки обновятся мгновенно.

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

Подписывайся на наш канал в Max 🟪
Please open Telegram to view this post
VIEW IN TELEGRAM
11👍10🔥41😁1
OpenAPI + Spring: ускоряем разработку и повышаем качество API

Разработка REST API — рутинная? Только если без OpenAPI. Узнайте, как избавиться от ручной синхронизации между фронтом, бэком и тестами.

На вебинаре разберём:
• зачем нужна OpenAPI-спецификация и как с ней жить удобно;
• генерацию кода и документации;
• интеграцию OpenAPI в Spring-приложение;
• советы по масштабируемости и поддержке API.

После вебинара вы сможете:
— быстро внедрить OpenAPI в свой проект;
— сократить ошибки на стыке команд;
— улучшить поддержку и документирование микросервисов.

12 ноября в 20:00 открытый урок проходит в преддверие старта курса «Разработчик на Spring Framework». Все участники получат скидку на обучение.

👉 Регистрация бесплатная, но количество мест ограничено — успей занять своё место:
https://vk.cc/cR6vHU

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
👍5🔥53
🖥 JBang — утилита для быстрого написания скриптов на Java

curl -Ls https://sh.jbang.dev | bash -s - app setup

JBang позволяет интерактивно с Java из командной строки и очень быстро писать простые сценарии

🖥 GitHub
🟡 Доки

Подписывайся на наш канал в Max 🟪
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍7🔥4
👩‍💻 Когда ломается магия фреймворков...

Более чем за десять лет работы со Spring Framework и Enterprise Java автор успел полюбить Spring Framework, возненавидеть и в итоге пересмотреть свои подходы к работе с ним. То же самое касается работы с рефлексией в целом и работы с АОП в частности.

Всё это из-за того, что магия фреймворков иногда ломается, и делает это очень неочевидно.


🌐🗣СМОТРЕТЬ VKVIDEO

Подписывайся на наш канал в Max 🟪
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥32
Знаете, в чём самая частая ловушка автоматизации?

Слить ресурсы в “идеальный” фреймворк, который годами будет поддерживать один энтузиаст, а ценности почти не даст.
Второй сценарий — пытаться всё автоматизировать вручную, игнорируя современные инструменты на базе ИИ, и внезапно оказаться в хвосте “конвейера тестов”.

Хотите выбраться из этого круга?
👨‍💻13 ноября в 20:00 собираемся на Практикум! Спикер: Павел Балахонов, 15+ лет автоматизации.

Узнаем:
— Что реально даёт платформа управления автотестами с ИИ, а где скрыты грабли.
— Когда “универсальный фреймворк” превращается в долгострой и почему ИИ — не просто модный хайп, а must-have в современных проектах.

Обсудим:
— Как не слить ресурсы в “универсальный” фреймворк без профита
— Почему платформа автотестирования = гибкость, а не компромисс
— Как реально внедрять ИИ: практика и подводные камни
— Почему распределение автотестов по потокам — это новый “золотой стандарт”
— И бонус — где платформы с ИИ реально экономят время команды

🎁Бонусы для всех участников:
7% скидка на любой курс OTUS
Настольный гайд: “Использование базовых команд Docker CLI”
Подборка musy-have уроков для middle+ QA

Дата: 13 ноября, 20:00
Ограниченное количество мест - успейте: https://tglink.io/18f1391e96b7

Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963. erid: 2W5zFHSjBVa
👍2🔥21
Fastexcel

Это легкая и производительная библиотека Java для работы с файлами Excel. Она позволяет читать, создавать и модифицировать электронные таблицы XLSX, используя простой и понятный API.

Подписывайся на наш канал в Max 🟪
Please open Telegram to view this post
VIEW IN TELEGRAM
12👍6🔥2