C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.100574 の関連記事表示

<< 0 >>
■100574  Re[3]: SpringのTransactionalについて
□投稿者/ ぼぼ -(2022/09/21(Wed) 00:13:26)
    ありがとうございます。アドバイスありがとうございます。
    伝説のカレーさんの仰る通り、@Transactionalの使い方が間違って?いました。
    
    >ググったところでは、@Transactionalがつけられたメソッドはそのメソッドが呼ばれたときに
    >トランザクションが開始され、例外が投げられたらロールバックされるって感じですね
    
    mqServiceとdbServiceの@Transactionalを排除し、もう一つ中間にServiceを配置し、これに@Transactionalを付与する事で
    @の処理もロールバックされました。
    
    
    ●Service0
    @Service
    public class TestService {
    
      @Autowired
      private MqService mqService;
    
      @Autowired
      private DbService dbService;
    
      @Transactional
      public void insert(Object requestInfo) throws RuntimeException {
          try {
            // @DB登録
            String[] params = {form.getName(), form.getAge()};
            dbService.insert(params);
    
            // AMQ送信
            mqService.execute(form);
          } catch (Exception e) {
            throw new RuntimeException(e);
          }
        }
      }
    
    
    ただ、検証時に気付いたのですが、DB側のAutoCommit設定もfalseにしないとコミットされてしまう様でした。
    正確にはSpring側のコネクション管理(プール等)なので、DB側では無いのですが。。
    
    DBのトランザクションはロールバックできましたが、MQ送信の方はロールバックされませんでした。
    質問の趣旨とずれてしまいますが、MQ側のコネクション管理でもAutoCommit設定はありますでしょうか?
    Gatewayで乗せてますが、送信自体はSpringのJmsTemplateを使用しています。
    
    
記事No.100570 のレス /過去ログ175より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -