Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Spring: transaction, locking, jpa

Как сделать блокирующую транзакцию для обработки событий?

Проверяет знание механизмов управления транзакциями при обработке событий.

Короткий ответ

  1. Использовать SELECT FOR UPDATE (блокирует строки на время транзакции).

  2. Применить @Transactional с isolation = SERIALIZABLE.

  3. Включить пессимистичную блокировку в JPA (LockModeType.PESSIMISTIC_WRITE).

Длинный ответ

1. SELECT FOR UPDATE (SQL)

  • Блокирует строки для изменения другими транзакциями.

  • Пример:

    BEGIN;
    SELECT * FROM orders WHERE status = 'PENDING' FOR UPDATE;
    -- Обработка событий...
    COMMIT;

2. @Transactional с SERIALIZABLE

  • Гарантирует строгую изоляцию.

  • Пример:

    @Transactional(isolation = Isolation.SERIALIZABLE)
    public void processEvents() {
        // Логика обработки...
    }

3. Пессимистичная блокировка в JPA

  • Пример:

    Order order = em.find(Order.class, orderId, LockModeType.PESSIMISTIC_WRITE);

Вывод:

  • Для высоконагруженных систем: SELECT FOR UPDATE.

  • Для Spring-приложений: @Transactional.

Уровень

  • Рейтинг:

    1

  • Сложность:

    6

Навыки

  • Spring

    Spring

  • Postgres

    Postgres

Ключевые слова

#transaction

#locking

#jpa

Подпишись на Java Developer в телеграм