Java Portal | Программирование
12K subscribers
1.43K photos
110 videos
43 files
1.45K links
Присоединяйтесь к нашему каналу и погрузитесь в мир для Java-разработчика

Связь: @devmangx

РКН: https://clck.ru/3H4WUg
Download Telegram
Spring Boot: можно добавить глобальные метаданные OpenAPI через аннотацию @OpenAPIDefinition.

Её размещают на основном классе приложения Spring Boot или в отдельном конфигурационном классе.

#SpringBoot #JavaDev

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
Java: начиная с Java 14 можно использовать records для создания коротких неизменяемых объектов, предназначенных для хранения данных.

короче обычных POJO
имеют встроенные equals(), hashCode(), toString()
по умолчанию неизменяемые

#JavaDev #Records

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Совет по Java

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

#JavaDev #CleanCode

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
В новых приложениях на Spring Boot у тебя есть выбор использовать WebClient вместо RestTemplate.

Он реактивный и неблокирующий
Работает на основе event loop, а не модели «один поток на один запрос» (thread-per-request)

#SpringBoot #JavaDev

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Spring Boot: Добавление ID трассировки запросов важно для отладки API
#SpringBoot #JavaDev

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Spring Boot: в нём есть встроенная поддержка пагинации через Pageable.

В репозиториях стоит использовать пагинацию вместо того, чтобы вытаскивать все данные сразу.
#SpringBoot #JavaDev

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
Выражения switch в Java 14+ являются исчерпывающими (exhaustive): компилятор проверяет, что обработаны все возможные значения.

Если пропустить константу enum, компиляция завершится ошибкой
Исправить это можно, обработав все значения enum или добавив ветку default
Более безопасный рефакторинг и меньше скрытых ошибок
#Java #JavaDev

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Java: VarHandle можно использовать как более лёгкую альтернативу volatile. Это строго типизированная ссылка на переменную.

Когда две нити работают с одной и той же переменной, процессор может переупорядочивать операции и кэшировать записи. В результате одна нить обновляет значение, а другая продолжает видеть его старую версию.

#JavaDev

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

VarHandle предоставляет более гибкий и лёгкий механизм благодаря набору специализированных методов.
setRelease — это операция «публикации» значения. Поток-записыватель говорит: «Я закончил. Всё, что я записал до этого момента, теперь безопасно для чтения другими потоками».
Это похоже на нажатие кнопки «Сохранить и опубликовать» для поста.

getAcquire — это операция «подписки» на опубликованные данные.
Она означает: «Дай мне опубликованное значение, и вместе с ним я корректно увижу всё, что было записано до его публикации».
setRelease и getAcquire работают в паре: если поток-читатель увидел флаг, записанный через setRelease, то он гарантированно увидит и все данные, которые были записаны до установки этого флага.
Это обеспечивает необходимую видимость данных между потоками без полной стоимости синхронизации, которую обычно накладывает volatile.

setOpaque — самый дешёвый вариант. Подходит для сценариев с одним потоком-записывателем, когда нужно лишь сохранить порядок собственных операций записи без дополнительных гарантий синхронизации между потоками.
Главное: volatile предоставляет все эти гарантии сразу, но за более высокую цену. VarHandle позволяет выбрать только те гарантии видимости и упорядочивания памяти, которые действительно нужны в конкретном случае.
Демо на GitHub: https://github.com/mcasari/codingstrain/tree/main/x-posts-examples/java-varhandle-fences-demo

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
3
Java: избегайте магических чисел.

В Java магическим числом (Magic Number) называют жёстко заданное числовое значение, используемое в коде без какого-либо пояснения того, что именно оно обозначает.

Магические числа снижают читаемость кода и усложняют его сопровождение.

#JavaDev #CleanCode

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍3
Java: По возможности не возвращайте из методов изменяемые внутренние коллекции, чтобы:
Не раскрывать внутреннее состояние объекта, повышая безопасность.
Иметь возможность менять реализацию без риска сломать другие части приложения.

#Java #JavaDev

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
Spring Cloud: централизуйте конфигурацию с помощью Spring Cloud Config вместо того, чтобы копировать application.properties в каждый сервис.

Используйте Spring Cloud Config для централизованного управления конфигурацией, а не копируйте application.properties повсюду.

// — 1) Config Server: одно место, которое обслуживает конфигурацию всех сервисов —
@SpringBootApplication
@EnableConfigServer
public class ConfigServerApp {
public static void main(String[] args) {
new SpringApplicationBuilder(ConfigServerApp.class).run(args);
}
}

// — 2) application.yml сервера (раздаёт файлы из classpath) —
// spring.profiles.active: native # локальные файлы, Git не нужен
// spring.cloud.config.server.native.search-locations: classpath:/config
// server.port: 8888

// — 3) /config/client-service.yml (конфигурация для "client-service") —
// myproperty: value

// — 4) Клиент: загружает конфигурацию с сервера при запуске —
// spring.application.name: client-service
// spring.config.import: optional:configserver:http://localhost:8888

@Component
public class GreetingClient {
@Value("${myproperty}") // значение получено с Config Server
private String myProperty;
}


#SpringBoot #JavaDev

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