«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Понимание @Transactional в Spring Boot

Понимание @Transactional в Spring Boot

Опубликовано 29 июля 2024 г.
Просматривать:865

Understanding @Transactional in Spring Boot

Управление транзакциями в Spring Boot можно осуществлять с помощью аннотации @Transactional. В этом сообщении блога мы рассмотрим, как использовать @Transactional для обеспечения согласованности данных и упрощения обработки ошибок в приложениях весенней загрузки.

1. Основное использование

Чтобы использовать @Transactional, вы обычно размещаете его в методах класса обслуживания, в котором вы хотите использовать транзакционное поведение.

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
public class UserService{

    @Transactional
    public void createUser() {
        // enter your transactional code here
    }
}

2. Уровни распространения и изоляции

Вы можете указать уровни распространения и изоляции транзакции, чтобы контролировать ее поведение:

  • Распространение: определяет поведение транзакции, когда существующая транзакция уже выполняется.

  • Изоляция: определяет уровень видимости данных транзакции.

@Transactional(propagation = Propagation.REQUIRED, 
              isolation = Isolation.READ_COMMITTED)
public void createUser() {
    // enter your transactional code here
}

3. Правила отката

Вы можете указать, какие исключения должны вызывать откат:

@Transactional(rollbackFor = Exception.class)
public void createUser() {
    // your transactional code here
}

4. Транзакции только для чтения

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

@Transactional(readOnly = true)
public void getUser() {
    // your read-only code here
}

5. Транзакции в классах

Вы также можете разместить @Transactional на уровне класса, чтобы применить его ко всем методам в классе:

@Service
@Transactional
public class UserService {

    public void getUser() {
        // transactional code
    }

    public void createUser() {
        // transactional code
    }
}

Пример сервиса с транзакционными методами

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
public class UserService {

    @Transactional
    public void saveUser() {
        // code to save data
    }

    @Transactional(readOnly = true)
    public void fetchUser() {
        // code to fetch data
    }

    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public void newTransaction() {
        // code to execute in a new transaction
    }

    @Transactional(rollbackFor = {CustomException.class})
    public void performWithRollback() {
        // risky code that may throw CustomException
    }
}

Краткое содержание

Использование @Transactional Spring Boot позволяет вам управлять транзакциями декларативно, точно определяя, как вы хотите, чтобы транзакции вели себя в различных сценариях. Это помогает обеспечить согласованность данных и упрощает обработку ошибок в ваших приложениях.

Рекомендации

https://www.baeldung.com/spring-transactions-read-only

https://docs.spring.io/spring-framework/reference/data-access/transaction/declarative/annotations.html

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/transaction/annotation/Transactional.html

Github: https://github.com/tharindu1998/transactional-blog

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/tharindufdo/understanding-transactional-in-spring-boot-8ce?1. Если обнаружено какое-либо нарушение прав, свяжитесь с [email protected], чтобы удалить ее.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3