Java Books
14.3K subscribers
207 photos
13 videos
269 files
267 links
Java Библиотека

По всем вопросам- @notxxx1

@ai_machinelearning_big_data - machine learning

@pythonl - Python

@itchannels_telegram - 🔥 best it channels

@ArtificialIntelligencedl - AI

@pythonlbooks-📚

@programming_books_it -it 📚

№ 5032728887
Download Telegram
🚀 В Spring Boot можно точечно отключать ненужную автоконфигурацию через аннотацию
**
@SpringBootApplication(exclude = …)**.

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

Так вы оставляете только нужные части автоконфигурации и избегаете скрытых конфликтов.

#SpringBoot #JavaDev
7👍6
💡 Java совет:

Начиная с Java 19, можно использовать *виртуальные потоки* - лёгкие потоки, которые управляются самой JVM, а не операционной системой.

Что это даёт:

- можно запускать тысячи и даже миллионы задач без нагрузки на ОС
- проще писать высоконагруженные приложения без сложной асинхронности
- более понятный и чистый код по сравнению с CompletableFuture и callback-подходами

Виртуальные потоки — главный шаг Java к масштабируемой конкурентности.

#Java #JavaDev
👍76🔥6👎1
🚀 Spring совет: таймауты RestTemplate лучше настраивать централизованно

Если в проекте много REST-запросов через RestTemplate, не разбрасывай таймауты по коду.

Правильнее сделать конфигурацию через RestTemplateBuilder:

- один общий RestTemplate с дефолтными timeout
- плюс отдельные клиенты под “медленные” сервисы (через `@Qualifier`)

Так у тебя:
- единая точка настройки
- меньше багов в проде из-за “вечных” запросов
- проще дебажить и менять параметры

💡 Особенно полезно в микросервисах, где внешние сервисы могут подвисать.

#SpringBoot #JavaDev
5👍2👎2🔥1
🖥 Маленький, но мощный трюк для продакшена в Spring Boot.

Если вы используете Hibernate, добавьте:

spring.jpa.hibernate.ddl-auto=validate

Что это даёт:

- Приложение проверяет, совпадает ли схема БД с entity
- Если есть расхождения — сервис не запустится
- Никаких случайных изменений структуры в продакшене

Идеальный сценарий - использовать вместе с Flyway или Liquibase:

spring.jpa.hibernate.ddl-auto=validate
spring.flyway.enabled=true

Что в итоге:

- Все изменения БД — только через migration-скрипты
- Fail fast, если схема и код не совпадают
- Меньше сюрпризов после деплоя

Это один из тех параметров, которые могут спасти продакшен от тихих и очень дорогих ошибок.

#SpringBoot #JavaDev
Please open Telegram to view this post
VIEW IN TELEGRAM
8👍4🔥4
Java Tip: рекурсивный обход файловой системы

В Java есть удобный способ рекурсивно обойти все файлы в директории - метод Files.walk().

Он возвращает Stream<Path>, что позволяет легко фильтровать и обрабатывать файлы через Stream API.

Пример - найти все .java файлы в папке src:


import java.io.IOException;
import java.nio.file.*;
import java.util.stream.Stream;

public class Main {
public static void main(String[] args) {
Path startPath = Paths.get("src");

try (Stream<Path> paths = Files.walk(startPath)) {
paths
.filter(Files::isRegularFile)
.filter(path -> path.toString().endsWith(".java"))
.forEach(System.out::println);
} catch (IOException e) {
e.printStackTrace();
}
}
}


Что происходит:

• Files.walk(startPath) - рекурсивно проходит по всем папкам
• filter(Files::isRegularFile) - оставляет только файлы
• endsWith(".java") - фильтр по расширению
• forEach - обработка найденных файлов

Это намного чище, чем писать собственную рекурсивную функцию обхода директорий.

#Java #JavaDev #Programming

⚡️ Полезные ресурсы по Java 🚀 Max

@javatg
4👍2🔥2
Java совет: сравнение времени без ловушек точности

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

Например:


Instant a = Instant.parse("2025-10-01T10:42:11Z");
Instant b = Instant.parse("2025-10-01T10:42:44Z");

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

Используйте Instant.truncatedTo():


boolean sameMinute =
a.truncatedTo(ChronoUnit.MINUTES)
.equals(b.truncatedTo(ChronoUnit.MINUTES));

System.out.println(sameMinute); // true

Метод truncatedTo() обрезает время до нужной точности:

• ChronoUnit.MINUTES
• ChronoUnit.HOURS
• ChronoUnit.DAYS

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

Полезно для:

• логов
• временных окон
• аналитики
• дедупликации событий

Маленький приём —
но часто спасает от неочевидных багов в time-логике.

#Java #JavaDev #Backend #Programming

⚡️ Полезные ресурсы по Java 🚀 Max

@java_library
3👍3🔥1
Forwarded from Java
🚀 Java 26 стала умнее — особенно в pattern matching

Теперь работа с pattern matching выражениями стала заметно стабильнее и предсказуемее

Что улучшили:

🟢 Более надёжный type inference
компилятор лучше понимает типы в сложных условиях

🟢 Меньше edge-case ошибок
меньше неожиданных падений и предупреждений

🟢 Консистентное поведение
одинаковая логика в if и switch

Что это даёт на практике:

раньше при усложнении условий
компилятор мог “теряться”

теперь:
- анализ потока стал умнее
- переменные из pattern matching корректно распознаются
- код становится чище и безопаснее

Java становится всё ближе к современным языкам
с удобным и предсказуемым контролем типов

#Java #JavaDev

⚡️ Полезные ресурсы по Java 🚀 Max

@javatg
5👍1🔥1
🚀 Java - regex без боли

Нашли интересную библиотеку - Sift. Она заменяет весь этот ад с регулярками на нормальный fluent API.

Теперь вместо нечитаемых строк вида:
^[0-9a-fA-F]{6}$

Пишешь код, который реально понимаешь:
.char('#')
.then()
.exactly(6)
.hexDigits()

📌 Что это дает:
- Читаемый и понятный код
- Меньше ошибок в regex
- Быстрее разработка и поддержка

По сути — это как “переводчик” с языка регулярных выражений на человеческий Java-код.

Если когда-нибудь ломал голову над regex -это прям must-have.

#Java #JavaDev
7👍4