プロジェクト

全般

プロフィール

操作

トランザクション

以下は Spring の PlatformTransactionManager を使った手動トランザクション制御のサンプルコード です。


✅ 手動トランザクション制御のサンプル(Java / Spring)

@Service
public class SampleService {

    public void executeProcess() {

        // ---------------------------
        // 1. トランザクション定義
        // ---------------------------
        DefaultTransactionDefinition def = new DefaultTransactionDefinition();
        def.setName(PROGRAM_ID);
        def.setReadOnly(false);
        def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);

        // ---------------------------
        // 2. トランザクション開始
        // ---------------------------
        TransactionStatus status = platformTransactionManager.getTransaction(def);

        try {
            // ---------------------------
            // DB 更新処理
            // ---------------------------
            // repository.update(...);
            // repository.insert(...);

            // ---------------------------
            // 3. コミット
            // ---------------------------
            platformTransactionManager.commit(status);

        } catch (Exception e) {

            // ---------------------------
            // 4. ロールバック
            // ---------------------------
            if (!status.isCompleted()) {
                platformTransactionManager.rollback(status);
            }

            // スタックトレース
            outputStackTrace(e);


            // ログ or 再スロー
            throw e;
        }


    }
}

✅ 説明

① DefaultTransactionDefinition

トランザクション名・読み取り専用・伝播レベルを指定。

② getTransaction

Spring に 手動でトランザクション開始 を依頼する。

③ commit

正常終了したら commit。

④ rollback

例外が出たら rollback。
※ status.isCompleted() を見るのは 二重ロールバックを防ぐため。


🔥 ポイント

  • PlatformTransactionManager を直接使う場合は 必ず try-catch で囲む
  • @Transactional と違って、例外で自動ロールバックされない
  • commit と rollback は両方書く必要あり

塩野 龍馬 さんが5ヶ月前に更新 · 0件の履歴