Java Portal | Программирование
12.8K subscribers
1.24K photos
104 videos
38 files
1.19K links
Присоединяйтесь к нашему каналу и погрузитесь в мир для Java-разработчика

Связь: @devmangx

РКН: https://clck.ru/3H4WUg
Download Telegram
Spring Boot: можно использовать @Retryable, чтобы переживать нестабильность внешних сервисов.

@Service
public class ExtService {

@Retryable(
value = { HttpServerErrorException.class, ResourceAccessException.class },
maxAttempts = 3,
backoff = @Backoff(delay = 2000, multiplier = 2)
)
public ExtServiceResponse process(ExtServiceRequest request) {
// Call external payment gateway
return restTemplate.postForObject("https://ext-gateway/api/service", request,
ExtServiceResponse.class);
}

@Recover
public ExtServiceResponse recover(Exception e, ExtServiceRequest request) {
// Fallback logic after retries are exhausted
log.error("Failed after retries: {}", e.getMessage());
return new ExtServiceResponse("FAILED");
}
}


Что это делает:

▪️Делает 3 ретрая, если вылетают указанные исключения.
▪️Стартует с задержки 2 секунды и удваивает ее на каждой попытке (экспоненциальный backoff).
▪️Если все попытки провалились, вызывает recover().

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥1
Вопрос для собеседования по Spring Boot:

Какой будет результат запуска, если активный профиль не указан?

Spring по умолчанию выберет бин DevNotificationService
Spring выберет первый бин в алфавитном порядке
Приложение упадет с NoSuchBeanDefinitionException
Бины не будут созданы, но приложение запустится
Будут созданы оба бина - NoUniqueBeanDefinitionException

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Java tip : старайся не шарить данные между потоками.

Используй иммутабельные объекты
Либо пусть потоки общаются через сообщения, не трогая общий state напрямую и не мутируя shared-состояние

// С иммутабельными объектами:

record Book(String title, int price) {} // Иммутабельный

public class BookJob implements Runnable {
private final Book book;
.... // конструктор

@Override
public void run() {
System.out.println(book.title() + " " + book.price());
}
}

// Обмен сообщениями:

...
new Thread(() -> {
try {
queue.put("mess1");
} catch (InterruptedException e) {}
}).start();

...
new Thread(() -> {
try {
String mess = queue.take();
} catch (InterruptedException e) {}
}).start();


👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
1🌚1
Какой SQL-запрос будет выполнен при вызове метода findByEmail()?

1. SELECT * FROM users WHERE email LIKE ?

2. SELECT id, name, email FROM users WHERE email LIKE ?

3. SELECT * FROM users WHERE email = ? LIMIT 1

4. SELECT * FROM users WHERE email = ?

5. SELECT * FROM users WHERE email = email

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
Spring Boot: используй @SpringBootApplication(exclude = …), чтобы отключить конкретные классы автоконфигурации.

Одна из возможных причин: кастомная конфигурация конфликтует с дефолтной.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
java.evolved это подборка, где каждый старый паттерн из Java показан рядом с его современным заменителем, прямо бок о бок.

👍👍👍

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