Java библиотека
31.6K subscribers
2.3K photos
77 videos
8 files
2.03K links
Книги, статьи, мемы и многое другое для Java программиста!

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

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

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

Сообщество VK https://vk.com/javatutorial
Download Telegram
🌐 JTS Topology Suite — мощная Java-библиотека для работы с геометрией. Проект предоставляет инструменты для создания и манипуляции векторной геометрией, включая пространственные операции. Входит в рабочую группу LocationTech Eclipse Foundation и служит основой для многих GIS-решений.

В комплекте идёт TestBuilder с GUI для визуализации геометрии и тестирования функций. Библиотека особенно полезна разработчикам GIS-приложений систем пространственного анализа. На базе JTS построены популярные порты для C++, .NET и JavaScript.

🖥 GitHub

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍54🔥4
👩‍💻 Интеграция 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.) для мониторинга кеша и статистики.

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍5🔥3
🖥 Logback Access Reactor Netty — управление access-логами для реактивных веб-приложений на Java и Kotlin. Этот проект предоставляет интеграцию популярной Java библиотеки Logback-access с HTTP-сервером Reactor Netty, на которым построен реактивный стек Spring WebFlux.

Инструмент доступен для использования двумя способами: в виде Spring Boot стартера для Spring Boot приложений и в виде отдельной библиотеки для приложений, которые используют Reactor Netty HTTP Server напрямую. Настройка простая: достаточно подключить зависимость в проект и добавить файл logback-access.xml с Logback конфигурацией access-логов (appender, encoder, pattern).

🖥 GitHub

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍43🔥3
👩‍💻 Как настроить 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";
}
}


Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
16👍9🔥5
⚠️ Чем опасен Scheduled(fixedRate) без Transactional в Spring?

Многие используют @Scheduled для запуска задач по таймеру, но забывают об одной критичной вещи — транзакциях. Особенно если указан fixedRate.

👎 Проблема:

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

Пример:

@Scheduled(fixedRate = 10_000)
public void cleanUp() {
List<Job> jobs = jobRepository.findAllByStatus(PENDING);
jobs.forEach(job -> {
job.setStatus(PROCESSING);
jobRepository.save(job);
});
}



💥 Через 10 секунд начнёт работать следующий вызов, даже если первый ещё не закончен.

Решение: обернуть в @Transactional и использовать блокировки:


@Transactional
@Scheduled(fixedRate = 10_000)
public void cleanUp() {
List<Job> jobs = jobRepository.findAllByStatusForUpdate(PENDING);
...
}



📌 Также можно:
— использовать fixedDelay вместо fixedRate — он ждёт окончания предыдущей задачи
— добавить флаг locked, чтобы явно помечать уже взятые задачи
— заменить @Scheduled на более надёжные инструменты:

🟢Spring Batch — для сложных задач
🟢Spring Integration / Camunda — если нужны гарантии и retry
🟢Quartz — если важны очередь и контроль запуска

🔧 Не упирайтесь в @Scheduled, если задача критична к повторной обработке.

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍6🔥4😁1
🧑‍💻 Магия IntelliJ IDEA

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

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

🟢Что делает

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

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

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

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

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

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🔥144
🚀 Хотите научиться интегрировать Apache Kafka и ClickHouse для эффективной обработки и анализа данных? 🚀

Присоединяйтесь к открытому уроку 20 августа в 20:00 МСК!

📚 Мы разберём, как настроить потоковую передачу данных, обеспечить надёжность и производительность, а также оптимизировать хранение и запросы. Вы узнаете, как использовать нативные коннекторы и Kafka Connect для интеграции этих двух мощных инструментов.

Мы покажем реальные кейсы, лучшие практики и как избежать частых ошибок при работе с Kafka и ClickHouse. Это знание поможет вам настроить эффективный pipeline и ускорить загрузку данных.

Присоединяйтесь и получите скидку на курс «Apache Kafka»:

https://vk.cc/cOFmGC

🎯 Не пропустите!

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
2👍2🔥2
🧱 Maven vs. ⚡️Gradle — что выбрать разработчику?

Когда речь заходит о сборке Java-проектов, чаще всего выбор стоит между двумя фреймворками: Maven и Gradle. Оба стали стандартом в индустрии, но у каждого — свои сильные и слабые стороны. Разбираем, кому что подойдёт 👇

🟢Maven — стабильная классика:

Строгая структура: легко читать и сопровождать
Надёжность и предсказуемость сборки
Много плагинов и готовых решений
⚠️ XML-конфигурация громоздкая
⚠️ Медленнее по сравнению с Gradle

🟡Gradle — гибкость и скорость:

Поддержка Kotlin и Groovy DSL
Инкрементальные сборки и кэширование
Гибкий подход к конфигурации
⚠️ Порог входа выше
⚠️ Сложности с отладкой настроек

📌 Вывод:

🟢 Выбирай Maven, если важны стабильность, читаемость и простота
🟡 Выбирай Gradle, если хочешь максимум производительности и гибкости

💬 В крупных проектах Gradle становится всё популярнее, особенно с Kotlin.
Но в enterprise-среде Maven по-прежнему остаётся стандартом.

А ты чем пользуешься? Делись в комментариях👇

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
11👍3🔥2
💻 Wasm на сервере в высоконагруженных системах 🚀

🔥 20 августа в 20:00 мск — открытый вебинар в OTUS.

На вебинаре вы узнаете:

- Как использовать WebAssembly для серверной разработки вне браузера.
- Как запускать wasm-приложения в продакшене, независимо от ОС и языка разработки.
- Как компилировать и масштабировать wasm-приложения в облаке с помощью Docker, NGINX Unit, Envoy и Knative.
- Как профилировать и оценивать производительность wasm на сервере.

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

- Сборка wasm-модулей с помощью TinyGo, Emscripten, Cargo.
- Настройка окружения с WASI для запуска серверных wasm-приложений.
- Запуск wasm в контейнерах и публикация через NGINX Unit.
- Интеграция с Envoy и деплой wasm-приложений в Knative.
- Инструменты для анализа производительности: wzprof, логи, метрики.

🎓 После вебинара вы:

- Поймёте, как WebAssembly работает на сервере и зачем его использовать.
- Освоите практическую работу с wasm, от сборки до масштабирования.
- Получите навыки интеграции wasm в существующую инфраструктуру.
- Узнаете, как анализировать производительность wasm-приложений в высоконагруженных системах.

💡 Присоединяйтесь, чтобы научиться запускать WebAssembly в продакшене и улучшить производительность ваших серверных приложений!

🎁Все участники получат чек-лист “Разбор ошибок: 5 распространенных проблем при проектировании отказоустойчивых хранилищ”

👉 Регистрация
https://vk.cc/cOFrAI

Бесплатное занятие приурочено к старту курса Highload Architect, обучение на котором позволит освоить решения, которые выдерживают большое количество запросов в секунду и правильно оптимизировать работоспособность серверов

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
3👍2🔥2
👩‍💻 Генерация 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 для продвинутого автодеплоя.

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥86👍5😁1
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍2🔥2
🖥 Java‑задача для тех, кто не боится `Concurrency` и `Immutable`

Представьте, что вы пишете in-memory кеш конфигураций. У вас есть ConfigService, который должен:

🔘Загружать конфигурации из базы (эмулируется loadConfigFromDB())
🔘Раздавать *текущую* версию конфигурации многопоточным клиентам
🔘Давать 100% thread‑safety и 0 блокировок
🔘Позволять hot‑reload без блокировки клиентов
🔘Гарантировать, что ни один поток никогда не увидит "смешанную" конфигурацию

🔧 Что нужно сделать:
Реализуйте ConfigService, который использует AtomicReference<Config> и Immutable-объекты, чтобы:

1. Конфигурация всегда была консистентной
2. Потоки не блокировали друг друга
3. Обновления конфигурации были моментальными и безопасными

📦 Пример API:

class ConfigService {
public Config getCurrentConfig(); // read-only, вызывается часто
public void reload(); // обновить конфиг, редко
}



🧠 Хитрость: нельзя использовать synchronized, volatile массивы, CopyOnWrite, ReentrantLock, и т.п. — только атомарность и неизменяемость.

🚀 Challenge accepted?

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥75👍5
REST или GraphQL? Этот выбор может определить, насколько удобным, быстрым и масштабируемым будет ваш API.

26 августа в 20:00 на открытом уроке мы разберём, когда стоит выбрать REST, а когда — GraphQL, а также реализуем оба подхода в Spring Boot. Эксперт покажет критерии выбора, разберёт практические кейсы и типичные ошибки.

Backend-разработчики на Java/Kotlin и тимлиды узнают, как применять эти технологии на практике, чтобы их проекты работали быстрее, были проще в сопровождении и готовыми к росту.

Вебинар проходит в преддверие старта курса «Разработчик на Spring Framework».

Регистрируйтесь сейчас и получите скидку на обучение: https://vk.cc/cOIctQ

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
👍32🔥2
Java Совет 🖥
Как понять, что Java‑код мог быть сгенерирован ИИ?

🟢Если вы видите в коде Collectors.toList(), а не Stream.toList() — это явный намёк 😉

Stream.toList() появился только в Java 16.
А Collectors.toList() — с нами ещё с Java 8, поэтому его до сих пор полно в туториалах, на Stack Overflow и во всех датасетах, на которых обучают ИИ.

📌 Документация

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
😁14👍65🔥4🎉1
🔥 От разработчика до архитектора высоконагруженных систем! 🚀

Высоконагруженные системы — необходимость для крупных проектов. Пройдите тест, проверьте свои знания и получите скидку на курс «Highload Architect» от OTUS.

Вы научитесь:

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

📌 Пройдите тест и получите скидку на курс! Подробности уточняйте у менеджера

👉 Пройти тест https://vk.cc/cOIdJ3

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
2👍2🔥2
📌 Сохраняйте шпаргалку по структурам данных

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍72🔥1
🔍 Завтра тестовое собеседование с Java-разработчиком

20 августа(уже завтра!) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Java-разработчика.

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

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

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

Реклама.
О рекламодателе.
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍3🔥2
Forwarded from Java Guru 🤓
Что будет результатом кода?
👍3🔥2