Java Portal | Программирование
13.1K subscribers
1.18K photos
100 videos
37 files
1.1K links
Присоединяйтесь к нашему каналу и погрузитесь в мир для Java-разработчика

Связь: @devmangx

РКН: https://clck.ru/3H4WUg
Download Telegram
Spring Boot наконец получил нативную поддержку gRPC

Забудьте о сторонних стартерах и костылях — Spring gRPC 1.0 GA уже здесь. Теперь можно строить высокопроизводительные RPC-сервисы с Protocol Buffers прямо из коробки, без плясок с бубном.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
10
Kubernetes-совет:

Java-приложения обычно требуют больше CPU на старте, чем во время обычной работы ☕️

Эта политика Kyverno:

apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: resize-pod-policy
spec:
mutateExistingOnPolicyUpdate: false
rules:
- name: resize-pod-policy
match:
any:
- resources:
kinds:
- Pod/status
- Pod
preconditions:
all:
- key: "{{request.object.status.containerStatuses[0].ready}}"
operator: Equals
value: true
mutate:
targets:
- apiVersion: v1
kind: Pod.resize
name: "{{request.object.metadata.name}}"
patchStrategicMerge:
spec:
containers:
- (name): sample-app-on-kubernetes
resources:
limits:
cpu: 0.5


- отслеживает момент завершения старта pod’а
- обновляет ресурсы pod’а прямо на месте
- снижает CPU-лимиты после старта

Итог: более быстрый запуск и меньшие затраты

Вот моя статья об этом

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔62👍1
Java-совет: избегайте глубоко вложенных if/else.

Используйте guard clauses (ранние выходы из метода) вместо этого.

 Вложенные if-else:

public void processOrder(Order order) {
if (order != null) {
if (order.isPaid()) {
if (order.getItems().size() > 0) {
// Обработка заказа
System.out.println("Заказ обработан");
} else {
System.out.println("В заказе нет позиций");
}
} else {
System.out.println("Заказ не оплачен");
}
} else {
System.out.println("Заказ равен null");
}
}

Использование guard clauses (читается проще):

public void processOrder(Order order) {
if (order == null) {
System.out.println("Заказ равен null");
return;
}

if (!order.isPaid()) {
System.out.println("Заказ не оплачен");
return;
}

if (order.getItems().isEmpty()) {
System.out.println("В заказе нет позиций");
return;
}

// Обработка заказа
System.out.println("Заказ обработан");


👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍104
Создаём первый Minecraft мод и подробно разбираем Mixin. Просто и понятно

Эта статья была написана из-за отсутствия адекватных русскоязычных руководств по моддингу, особенно для новых версий Minecraft. То, что описано в статье, будет применимо для таких загрузчиков модов, как Fabric и Forge, а также для реализации различных функций.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
14👍3🔥1
Spring Boot: для новых приложений выбирайте WebClient вместо RestTemplate

~ Реактивный и неблокирующий
~ Работает на event-loop, а не на модели один поток на запрос
~ Отлично подходит для микросервисной архитектуры

 RestTemplate (blocking)

@Service
public class ItemService {

private final RestTemplate restTemplate;

public ItemService(RestTemplate restTemplate) {
this.restTemplate = restTemplate;
}

public Item getItem(Long id) {
return restTemplate.getForObject(
"https://api.example.com/items/{id}",
Item.class,
id
);
}
}

WebClient (non-blocking)

@Service
public class ItemService {

private final WebClient webClient;

public ItemService(WebClient webClient) {
this.webClient = webClient;
}

public Mono<Item> getItem(Long id) {
return webClient.get()
.uri("/items/{id}", id)
.retrieve()
.bodyToMono(Item.class);
}
}


👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍75
This media is not supported in your browser
VIEW IN TELEGRAM
Если у тебя Spring Boot приложение подключено как вложенный модуль и оно использует поддержку Docker Compose, то в IntelliJ IDEA нужно задать MODULE_WORKING_DIRECTORY, чтобы среда смогла корректно определить, где лежит файл compose.yaml.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍62
Spring Boot: можно добавить глобальные метаданные OpenAPI с помощью аннотации @OpenAPIDefinition.

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

@SpringBootApplication
@OpenAPIDefinition(
info = @Info(
title = "Product Management API",
version = "v1.0",
description = "Product API Example",
termsOfService = "https://www.example.com/terms",
contact = @Contact(
name = "API Support",
email = "support@example.com",
url = "https://example.com/support"
),
license = @License(
name = "Apache 2.0",
url = "https://www.apache.org/licenses/LICENSE-2.0"
)
)
)
public class ApiApplication {
}
👍3
⭐️ Road To Highload: Крупноблочная архитектура

В видеопроекте Road to Highload Сергей Трегуб, руководитель бэкенд‑разработки продуктовых сервисов Яндекс 360, рассказывает, как крупноблочная архитектура упрощает коммуникацию между разными командами разработки и помогает быстро принимать решения: в каком компоненте разместить новую бизнес‑логику и какие дополнительные блоки потребуются для её поддержки.

Road to Highload — это цикл видеоматериалов от Яндекс 360 о том, как строятся системы, которыми ежедневно пользуются миллионы людей и тысячи компаний. Здесь обсуждаются high‑load и отказоустойчивость не по учебникам, а на основе многолетнего практического опыта.


Смотрите проект, чтобы узнать, как создаются одни из крупнейших облачных сервисов в России:

Сайт проекта
VK Видео
Ютуб
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Типы Серверов в Современных Системах

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
9👍3
Spring Boot: аккуратно задавайте границы @ComponentScan, чтобы случайно не просканировать целиком весь пакет.

Предположим, вы пишете что-то вроде @ComponentScan("com.mycompany"), хотя на самом деле нужно сканировать только часть подпакетов com.mycompany:

- Увеличивается время сканирования classpath
- Замедляется старт приложения
- Подтягиваются классы, которые вообще не должны регистрироваться как Spring-бины

Лучшие практики:

Полагайтесь на дефолты:

@SpringBootApplication
public class MyApplication { }


По умолчанию Spring сканирует только подпакеты пакета, в котором лежит MyApplication.

Сканируйте конкретные подпакеты:

@ComponentScan({
"com.mycompany.myapp.product",
"com.mycompany.myapp.order"
})


👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
4
This media is not supported in your browser
VIEW IN TELEGRAM
Какие фичи C++ реально стоят того, чтобы ими пользоваться каждый день — а какие живут только в докладах и спорах на форумах?

Во втором выпуске «АйТир Листа» встретились два практикующих разработчика —
Данил Черепанов (МойОфис) и Антон Полухин (Яндекс) — и разобрали любимые и спорные возможности C++. Где-то всё было однозначно, а местами мнения разошлись кардинально 🙂


👉 Выпуск ЗДЕСЬ

Реклама
ООО "НОВЫЕ ОБЛАЧНЫЕ ТЕХНОЛОГИИ"
ИНН: 7703807270
erid: 2W5zFJaQXLt
1👍1🔥1
Spring Boot: все важные аннотации

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
14👍5
Java совет: по возможности не возвращай из методов изменяемые внутренние коллекции. Это дает плюсы:

1. Не светишь внутреннее состояние, меньше рисков и утечек
2. Можно спокойно менять реализацию под капотом, не ломая остальной код

Если всё же нужно возвращать коллекции напрямую, можно сделать так:

- Вернуть глубокие копии коллекций (сложнее в реализации)

- Вернуть только read-only представление, например:

Collections.unmodifiableList(items)


👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Может пригодится: самохостящаяся система uptime-мониторинга, которую можно развернуть у себя и следить за тем, работают ли твои HTTP/S сервисы. Приложение показывает статус, считает аптайм, умеет проверять SSL, есть публичные статус-страницы, уведомления и прочее.

Забираем здесь

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
Java-лайфхак: record — это не только про данные. В них можно добавить свои конструкторы или методы для валидации.

// Конструкторы, статические методы и методы экземпляра:

public record Email(String address) {

// Конструктор с валидацией
public Email {
if (address == null || !address.matches("^[\\w-.]+@([\\w-]+\\.)+[\\w-]{2,4}$")) {
throw new IllegalArgumentException("Некорректный email: " + address);
}
}

// Метод экземпляра
public String domain() {
return address.substring(address.indexOf('@') + 1);
}

// Статический метод
public static Email from(String raw) {
return new Email(raw.trim().toLowerCase());
}
}


👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥2
Понимание Git worktree. Отличная фича Git, особенно актуальная в эпоху агентных ИИ.

Подробнее

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
Git worktree — отличный способ поднять песочницу, куда можно запустить агентов искать решение, пока ты спокойно продолжаешь работу на master или другой ветке. На фото баш-скрипт, который : создаёт новый worktree/ветку под задачку с префиксом ga fix (типа fizzy--fix), а потом gd можно снести всё к чертям, когда закончил.

Если хочешь потыкать у себя — есть удобный gist для копипасты.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
This media is not supported in your browser
VIEW IN TELEGRAM
На Stepik вышел курс по Linux

Внутри 20+ модулей: от установки Linux и работы с файлами до сетей, прав, дисков, процессов, автоматизации на Bash и многого другого. Всё сразу закрепляется на практике (200+ заданий с автопроверкой)

Материал подаётся понятным языком, шаг за шагом, на реальных примерах и с наглядными схемами.

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

Есть бесплатные демо-уроки для ознакомления. В ближайшие 48ч курс доступен со скидкой 25% по промокоду «HNY_LINUX»: открыть курс на Stepik

P.S. Курс можно купить в подарок на Новый год
2🔥1
Hidden классы в Java. Что скрывают Lambda выражения

С переходом Java на более безопасные и стандартизированные подходы к динамической генерации классов, скрытые (hidden) классы стали ключевым механизмом замены устаревшего Unsafe::defineAnonymousClass

Они решают проблемы доступности, управления жизненным циклом и контроля доступа, особенно актуальные для разработчиков фреймворков и языков на JVM. Хотя скрытые классы пока не полностью заменяют функциональность Unsafe, они лежат в основе ряда важных механизмов, такие как, например, реализация лямбд в JDK.

Подробнее

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Spring Boot совет

В тестах на Spring Boot можно без лишних настроек использовать RestTestClient через аннотацию @AutoConfigureRestTestClient

Для TestRestTemplate есть аналогичная аннотация — @AutoConfigureTestRestTemplate

@SpringBootTest
@AutoConfigureRestTestClient
public class PersonControllerTests {

private static final String API_PATH = "/persons";

@Test
void add(@Autowired RestTestClient restTestClient) {
restTestClient.post().uri(API_PATH)
.body(Instancio.create(Person.class))
.exchange()
.expectStatus().is2xxSuccessful()
.expectBody(Person.class)
.value(person -> assertNotNull(person.getId()));
}
}


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