Библиотека джависта | Java, Spring, Maven, Hibernate
24.3K subscribers
1.96K photos
38 videos
42 files
2.77K links
Все самое полезное для Java-разработчика в одном канале.

Список наших каналов: https://t.me/proglibrary/9197

Для обратной связи: @proglibrary_feeedback_bot

По рекламе: @proglib_adv

РКН: https://gosuslugi.ru/snet/67a5bbda1b17b35b6c1a55c4
Download Telegram
🎮 Эффективное управление ветками с помощью git rebase

Проблема: при работе с несколькими ветками в Git история коммитов может становиться запутанной из-за частых слияний, что усложняет анализ изменений.

Решение:
в книге "Mastering Git" автор показывает использование команды git rebase, которая позволяет линейно интегрировать изменения из одной ветки в другую, сохраняя историю чистой и понятной.

Пример кода:
# Переключаемся на ветку feature
git checkout feature

# Выполняем rebase на master
git rebase master

# Если возникают конфликты, разрешаем их и продолжаем rebase
git add <исправленные файлы>
git rebase --continue

# Переключаемся на master и сливаем изменения
git checkout master
git merge feature --ff-only


Преимущества:

— Чистая и линейная история изменений.
— Упрощение процесса ревью кода.
— Лёгкость в отслеживании изменений.

Еще больше полезных книг — в нашем канале @progbook

🐸 Библиотека джависта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
June 3
⚙️ Интеграция Redis в Spring Boot с AI

Нужно быстро подключить Redis для кеширования, блокировок, хранения состояний или очередей задач — без лишней возни с конфигами и шаблонами? AI сгенерирует код под ключ — учитывая назначение, паттерны и лучшие практики.

📝 Промпт:
Generate a Spring Boot service that integrates with Redis to handle [caching / rate limiting / distributed locks / task queues] for [описание бизнес-логики].  
Include configuration, connection pooling, and example use cases.
Ensure reliability with TTL management, error handling, and fallback mechanisms.
Use Spring Data Redis or Lettuce/Jedis client. Explain the trade-offs of chosen technologies and patterns (e.g., Cache Aside, Write-Through).


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

— Добавьте also include support for Redis Streams (or Pub/Sub) for event-driven processing with examples для включения Redis Streams или Pub/Sub.
— Добавьте use Lua scripts for atomic operations and provide sample use cases (e.g., rate limiting or locking) для Lua-скриптов.
— Добавьте integrate Spring Boot Actuator and Redis metrics for monitoring cache performance (hit/miss, TTL, etc.) для мониторинга кеша и статистики.

🐸 Библиотека джависта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
June 4
June 5
🎯 Как настроить JWT аутентификацию в Spring Boot

Для настройки JWT аутентификации в Spring Boot следуйте этим шагам:

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


2️⃣ Создайте класс для генерации JWT
public class JwtTokenUtil {
private static final String SECRET_KEY = "secretKey";

public static String generateToken(String username) {
return Jwts.builder()
.setSubject(username)
.setIssuedAt(new Date())
.setExpiration(new Date(System.currentTimeMillis() + 1000 * 60 * 60))
.signWith(SignatureAlgorithm.HS256, SECRET_KEY)
.compact();
}

public static String getUsernameFromToken(String token) {
return Jwts.parser().setSigningKey(SECRET_KEY).parseClaimsJws(token).getBody().getSubject();
}

public static boolean isTokenExpired(String token) {
return getExpirationDateFromToken(token).before(new Date());
}

private static Date getExpirationDateFromToken(String token) {
return Jwts.parser().setSigningKey(SECRET_KEY).parseClaimsJws(token).getBody().getExpiration();
}

public static boolean validateToken(String token, String username) {
return (username.equals(getUsernameFromToken(token)) && !isTokenExpired(token));
}
}


3️⃣ Создайте фильтр для JWT токенов
public class JwtAuthenticationFilter extends OncePerRequestFilter {
private static final String HEADER_STRING = "Authorization";
private static final String TOKEN_PREFIX = "Bearer ";

@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
String header = request.getHeader(HEADER_STRING);

if (header != null && header.startsWith(TOKEN_PREFIX)) {
String token = header.substring(TOKEN_PREFIX.length());

try {
if (JwtTokenUtil.validateToken(token, JwtTokenUtil.getUsernameFromToken(token))) {
UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(
JwtTokenUtil.getUsernameFromToken(token), null, new ArrayList<>());
SecurityContextHolder.getContext().setAuthentication(authentication);
}
} catch (ExpiredJwtException e) {
response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
}
}

filterChain.doFilter(request, response);
}
}


4️⃣ Настройте Spring Security
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.authorizeRequests()
.antMatchers("/login").permitAll()
.anyRequest().authenticated()
.and()
.addFilter(new JwtAuthenticationFilter());
}
}


5️⃣ Создайте контроллер для логина
@RestController
public class AuthController {

@PostMapping("/login")
public String login(@RequestBody AuthRequest authRequest) {
if ("admin".equals(authRequest.getUsername()) && "admin123".equals(authRequest.getPassword())) {
return JwtTokenUtil.generateToken(authRequest.getUsername());
}
return "Invalid credentials";
}
}


🐸 Библиотека джависта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
June 5
Spring Boot vs Jakarta EE?

Сравнение двух крупных фреймворков до сих пор вызывает жаркие споры.

Любители Spring Boot хвалят скорость старта, гибкость и богатую экосистему. Фанаты Jakarta EE ценят стандартизацию, долгосрочную поддержку и интеграцию с корпоративными решениями.

⚡️ На практике:

— Spring Boot отлично подходит для быстрых проектов и микросервисов.
— Jakarta EE удобен для крупных систем с акцентом на стандарты и масштабируемость.

💬 Что в вашем опыте показало себя лучше?

🐸 Библиотека джависта #междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
June 5
👑 Магия IntelliJ IDEA

Когда нужно аккуратно скопировать блок кода, метод, выражение или просто цепочку вызовов — забудьте про мышь. У IntelliJ есть инструмент поумнее.

Хоткей: Ctrl + W (или Cmd + W на macOS)

🔹 Что делает

По нажатии IDEA «расширяет» выделение:
— сначала слово,
— потом выражение,
— затем строку целиком,
— потом блок кода,
— и так до всего метода или класса.

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

— Быстро выделить логически связанный фрагмент без лишней возни.
— Удобно вырезать или перемещать части кода.
— Работает даже внутри строк, SQL-запросов, JSON и XML.

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

— Поставьте курсор в нужное место.
— Нажимайте Ctrl + W по очереди — и наблюдайте, как IDEA понимает структуру кода.
— Ctrl + Shift + W — отменяет шаг назад.

🐸 Библиотека джависта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
June 6
This media is not supported in your browser
VIEW IN TELEGRAM
Сохраняйте шпаргалку по разрешениям файлов в Linux

🐸 Библиотека джависта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
June 6
June 7
Стоит ли читать "Java Concurrency in Practice" в 2025?

Классическая книга о многопоточности — до сих пор актуальна или устарела?

Сторонники считают, что она даёт фундаментальное понимание и помогает избегать типичных ошибок. Критики говорят, что современные подходы (виртуальные потоки, реактивное программирование) частично вытеснили классическую модель.

💬 Актуальна ли книга или стоит перейти на новые парадигмы?

🐸 Библиотека джависта #междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
June 7
🆕 Java Digest: подборка материалов

🔹 Mastering JVM Memory Troubleshooting

Интересная статья о диагностике и устранении проблем с памятью в Java-приложениях. Узнайте о разных видах ошибок: переполнении heap-а и метапространства, утечках собственной памяти, о методах их обнаружения и решения.

🔹 Strings Just Got Faster

Автор описывает улучшение производительности строк в JDK 25. Метод String::hashCode может быть оптимизирован компилятором, используя свертывание констант (constant folding), что улучшает производительность строковых ключей в Map<String, V>.

🐸 Библиотека джависта #свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
June 8
June 8
Какая из следующих гарантий доставки сообщений НЕ существует?
Anonymous Quiz
8%
At most once
3%
At least once
7%
Exactly once
70%
At least twice
12%
Посмотрю ответ
June 9
😮 Топ-вакансий для джавистов за неделю

Java-разработчик (HR-платформа) — 220 000 —‍ 490 000 ₽ — удалёнка

Junior Java Developer — от 65 000 до 110 000 ₽ — удалёнка

Senior Software Engineer (Java) — 4 000 - 6 000$ — удалёнка

Team Lead Full Stack разработчик (Java + React) — от 300 000 до 400 000 ₽ — удалёнка

➡️ Еще больше топовых вакансий — в нашем канале Java jobs
Please open Telegram to view this post
VIEW IN TELEGRAM
June 9
🎮 Использование метода «least_conn» для балансировки нагрузки

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

Решение: в книге "Nginx Cookbook: Advanced Recipes for High-performance Load Balancing" автор показывает использование директивы least_conn в блоке upstream для выбора сервера с наименьшей нагрузкой.

Пример кода:
upstream backend {
least_conn;
server backend1.example.com;
server backend2.example.com;
}

server {
location / {
proxy_pass http://backend;
}
}


Преимущества:


— Распределение нагрузки на серверы с учётом их текущей загрузки.
— Улучшение производительности за счёт оптимального использования ресурсов.
— Снижение времени отклика для пользователей.

Еще больше полезных книг — в нашем канале @progbook

🐸 Библиотека джависта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
June 10
June 10
⚙️ Генерация REST API на Spring Boot с AI

Нужно быстро развернуть REST API c валидацией, логированием, DTO, безопасностью и документацией?
AI справится с этим за один промпт — код будет готов к продакшну, с учетом архитектурных паттернов.

📝 Промпт:

Generate a Spring Boot REST API for managing [сущность или бизнес-логика, например: product catalog, user profiles, task assignments].
Include CRUD endpoints, validation (Hibernate Validator), exception handling, DTO mapping (MapStruct or ModelMapper), and OpenAPI documentation.
Ensure security with JWT-based authentication and role-based access control (Spring Security).
Use layered architecture (Controller → Service → Repository) and follow clean code principles. Add unit tests for controller and service layers.


💡 Расширения:

— Добавьте integrate with PostgreSQL using Spring Data JPA and specify indexes/constraints для подключения к БД.
— Добавьте support pagination and filtering with Pageable and Specification API для удобных выборок.
— Добавьте plug into CI/CD pipeline with Docker and GitHub Actions для продвинутого автодеплоя.

🐸 Библиотека джависта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
June 11
Сохраняйте шпаргалку по структурам данных

🐸 Библиотека джависта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
June 12