TGViewer
Channel Public Channel
Java Portal | Программирование

Java Portal | Программирование

@java_iibrary

Присоединяйтесь к нашему каналу и погрузитесь в мир для Java-разработчика

Связь: @devmangx

РКН: https://clck.ru/3H4WUg
Subscribers
11.7K
Photos
1.6K
Videos
118
Links
1.6K

Showing posts older than #2362 · Back to latest

Older Posts 20 shown
Post #2361 1.81K
Инструмент визуализации кода, который поможет разобраться в кодовой базе.

Поможет быстрее понять сложные проекты, разложив всё в понятной инфографике

⛓ Ознакомиться: Тык

👉 Java Portal
  • 👍 4
Post #2360 1.76K
Этот класс задуман как неизменяемый (immutable), но в нём есть неочевидный баг. Сможешь его найти?

👉 Java Portal
  • 🤔 14
  • 👍 7
Post #2359 1.92K
В новых приложениях на Spring Boot у тебя есть выбор использовать WebClient вместо RestTemplate.

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

#SpringBoot #JavaDev

👉 Java Portal
  • 👍 1
Post #2358 1.86K
Новое в Java 25: гибкие тела конструкторов (Flexible Constructor Bodies, JEP 513)!

Теперь можно выполнять валидацию аргументов или подготовительную инициализацию до явного вызова другого конструктора (this(...) или super(...)) — больше не нужны шаблонные вспомогательные методы (helper methods) ради такой логики.

👉 Java Portal
  • 👍 2
Post #2357 1.83K
@ConditionalOnClass — это аннотация Spring Boot, которая используется в auto-configuration.

✅ Она условно активирует bean или configuration только в том случае, если указанный класс присутствует в classpath.
#SpringBoot #Microservices

👉 Java Portal
Post #2356 2.05K
@Sql или @SqlGroup позволяют заранее загружать тестовые данные для выполнения воспроизводимых тестов.

Позволяет:

✅ Вставлять тестовые данные
✅ Очищать таблицы
✅ Сбрасывать состояние базы данных

#SpringBoot #IntegrationTesting

👉 Java Portal
  • 👍 1
Post #2354 1.69K
Spring Boot: используй @EntityGraph для управления стратегиями загрузки и предотвращения N+1 запросов.
#SpringBoot #SoftwareEngineering

👉 Java Portal
  • 🏆 1
Post #2353 1.67K
Концепции Spring Security: OAuth2 Resource Server

С одной декларацией OAuth2ResourceServer Spring Security будет:

1- Извлекать заголовок Authorization: Bearer <token> из каждого запроса
2- Валидировать подпись токена через публичный ключ Authorization Server’а (полученный через JWKS URI)
3 Проверять claims: срок действия (exp), issuer и audience
4- Заполнять SecurityContext аутентифицированным principal’ом

👉 Java Portal
  • ❤ 6
  • 🌚 2
Post #2351 1.7K
image_2026-05-10_08-18-07.png50.9 KB
Завершаемые фьючеры для чистого асинхронного программирования

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

Реальный сценарий: параллельные HTTP-вызовы к нескольким API с последующим объединением результатов, цепочкой преобразований и централизованной обработкой ошибок.

👉 Java Portal
  • ❤ 1
Post #2350 1.66K
Spring Boot: с org.hibernate.SQL=DEBUG можно получить более детальный вывод Hibernate-запросов прямо в логах.

#SpringBoot #Hibernate

👉 Java Portal
  • 👍 8
Post #2349 1.92K
Микросервисы — плохой выбор по умолчанию для 94% команд.

Зачем разбивать приложение на набор сервисов, которым нужно общаться через сеть.

На бумаге это выглядит как «правильный» подход. Масштабирование звучит привлекательно.

Но на практике я видел, как это ломается, шесть раз.

Команды из 5 инженеров поднимали 11 сервисов с несколькими очередями сообщений. Всё становилось медленнее.

Деплой, который занимал минуты, растягивался до 35 минут из-за зависимостей.

Отладка превращалась в кошмар: один баг — и приходится трейсить запрос через несколько сервисов и кодовых баз.

Сложность не уменьшилась. Она просто распределилась.

Микросервисы — это решение под масштабирование, но большинство команд внедряют их слишком рано, когда проблемы масштаба ещё нет.

Если ты всё ещё работаешь на localhost, основная проблема — не масштаб. Это стабильный релиз.

Когда микросервисы имеют смысл:

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

Если этого нет — платишь налог распределённых систем без реальной выгоды.

Начинай с монолита и держи модульность. Делить стоит только тогда, когда связность начинает тормозить разработку.

Большинство обсуждений «нам нужны микросервисы» на деле не про архитектуру.

Они про грязную кодовую базу или болезненные деплои.

Сначала решаются эти проблемы.

Простые системы легче понимать. Перегруженные обычно разваливаются под собственным весом.

👉 Java Portal
  • 👍 10
Post #2348 1.64K
Spring Boot: используйте @Async только для небольших задач на оффлоадинг и только с явно заданным исполнителем.
#SpringBoot #SoftwareDevelopment

👉 Java Portal
Post #2347 1.85K
Возможно, один из самых безумных репозиториев с Docker

Он позволяет запускать полноценную macOS внутри Docker -контейнера и открывать её прямо из браузера.

- Поднимается macOS одной командой Докера
- Запуск полноценной macOS на Linux через QEMU/KVM
- Открывается сразу в браузере
- Поддержка нескольких версий macOS
- Подходит для тестирования, CI и macOS-специфичных инструментов

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

Репозиторий: https://github.com/dockur/macos

👉 Java Portal
GitHub GitHub - dockur/macos: MacOS inside a Docker container. MacOS inside a Docker container. Contribute to dockur/macos development by creating an account on GitHub.
  • 👍 4
Post #2346 1.76K
POST не идемпотентен.
PUT — идемпотентен.
PATCH — зависит от реализации.

Ошибка в этих свойствах ломает ретраи.

Идемпотентность означает: один и тот же запрос даёт один и тот же результат.

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

GET — идемпотентен.
PUT — идемпотентен.
DELETE — идемпотентен.
POST — не идемпотентен.
PATCH — зависит (инкремент vs установка значения).

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

Так устроены платёжные системы.
Без этого ретраи превращаются в дублирование операций.

👉 Java Portal
  • ❤ 10
  • 🔥 2
Post #2345 1.76K
Совет по Java

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

#JavaDev #CleanCode

👉 Java Portal
  • 👍 5
Post #2344 1.73K
JetBrains использует IDE-нативные возможности понимания кода, чтобы делать ИИ-агентов эффективнее на больших кодовых базах.

Зачем тратить время и токены на grep, если в IDE уже есть семантический поиск, навигация по символам и рефакторинги?

Интересный момент: Codex, судя по наблюдениям, заметно лучше использует такие инструменты, чем Claude Code.

👉 Java Portal
The JetBrains Blog We Gave Agents IDE-Native Search Tools. They Got Faster and Cheaper. - The JetBrains Blog We ran the same coding tasks with and without prebundled tooling, across multiple models and languages. Here's what changed.
  • 👍 3
  • ❤ 1
Post #2343 1.69K
Java: начиная с Java 14 можно использовать records для создания коротких неизменяемых объектов, предназначенных для хранения данных.

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

#JavaDev #Records

👉 Java Portal
  • 👍 5
Post #2342 1.65K
Spring Boot: использование Spring Cloud Config для централизованного управления конфигурацией — важная практика.

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

Сначала нужно сконфигурировать сервер конфигурации.
Поднимается отдельное приложение сервера конфигурации с аннотацией @EnableConfigServer и Git-репозиторий, где лежат все .yml файлы.
Сервер отдает конфигурацию по HTTP, клиенты подтягивают её при старте.

<!-- Setting Up the Config Server -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>


// Enable it with @EnableConfigServer annotation

@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication {

public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}


# Point it to your Git repository

spring:
cloud:
config:
server:
git:
uri: https://github.com/your-org/config-repo
default-label: main
clone-on-start: true

server:
port: 8888


Структура Git-репозитория следует соглашениям именования Spring Boot:

{application-name}-{profile}.yml
или
{application-name}/{profile}.yml

Клиентское приложение нужно настроить: добавить стартовую зависимость и минимальную конфигурацию.

<!-- Add the client dependency -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>


# Configure the application to fetch config from the config server

spring:
application:
name: order-service

config:
import: "optional:configserver:http://localhost:8888"

cloud:
config:
profile: dev

server:
port: 8080


Динамическое обновление конфигурации без рестарта достигается через перезагружаемые бины с аннотацией @RefreshScope:

package ...;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;

@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication {

public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}


Конфиденциальные данные должны быть зашифрованы в файлах конфигурации:

@Service
@RefreshScope
public class PricingService {

@Value("${pricing.discount.percentage:0}")
private int discountPercentage;

// This value updates when config changes, no restart needed

}


curl -X POST http://localhost:8080/actuator/refresh


👉 Java Portal
  • 👍 4
  • 🔥 2
  • ❤ 1
Post #2341 1.65K
Значения области видимости финализированы в Java 25.

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

static final ScopedValue<User> USER = ScopedValue.newInstance();

ScopedValue.where(USER, user)
.run(() -> UserService.updateUser());



👉 Java Portal
Post #2340 1.71K
Java-совет : можно использовать List.of() и Set.of() для создания неизменяемых коллекций.

✅ Это быстрый способ создать немодифицируемые списки и множества без использования Collections.unmodifiableList().

#Java #Коллекции

👉 Java Portal
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →