「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Spring Boot の @Transactional を理解する

Spring Boot の @Transactional を理解する

2024 年 7 月 29 日に公開
ブラウズ:618

Understanding @Transactional in Spring Boot

Spring Boot でのトランザクションの管理は、@Transactional アノテーションを使用して行うことができます。このブログ投稿では、@Transactional を使用してデータの一貫性を確保し、Spring Boot アプリケーションでのエラー処理を簡素化する方法を検討します。

1. 基本的な使い方

@Transactional を使用するには、通常、トランザクション動作が必要なサービス クラスのメソッドに @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