a0841_19742018/04/05 15:10ご回答ありがとうございます。 PostgreSQLはストアドプロシージャも使用する予定です。 ストアドプロシージャの戻り値により、COMMIT、ROLLBACKを考えておりますが、 その際も@Transactionalを使用して制御したほうがよいのでしょうか。
euledge2018/04/05 21:46transaction管理が必要な処理の範囲をメソッドにして、そのメソッドに@transactionalをつけます。 rollbackが必要になったらそのメソッド内で非検査例外を投げればrollbackされますよ。
a0841_19742018/04/07 06:20ご回答ありがとうございます。 @transactionalを使用した場合の動きで分からない事があります。 もしご存知であれば、教えて頂けますでしょうか。 【ご質問】 例えばあるサービスAに@transactionalをつけたとします。 (サービスAのscopeは設定しないので、singletonとします。) このサービスAでは、DBへのINSERT、UPDATEを実施してくれます。 また、このサービスAは、あるController1から実施されます。 この状態でController1を2つのリクエストから同時に処理された場合、 サービスAのトランザクションはどのような動きをするのでしょうか? 1つ目のリクエストがcommit or rollbackされるまでは、 2つ目のリクエストのトランザクションは開始されないのでしょうか?
a0841_19742018/04/13 15:11実際に上記プログラムを作成してみました。 @Transactionalは、以下のように登録しています。 @Transactional(isolation=Isolation.READ_COMMITTED,propagation=Propagation.REQUIRED) この状態で1つ目、2つ目ともに同じレコードに対して、UPDATEを実施したところ、 1つ目の処理が終わるまで、2つ目の処理は実施されず待っておりました。 おそらく1つ目のDBのCOMMIT処理が終わるまでは、2つ目のDBのCOMMIT処理が出来ず待っている状態であるかと思います。 予想通りの動きでよかったです。
Groove2018/04/16 02:00自分はアノテーションによるトランザクション制御のためにspringを使っているといっても過言ではないくらいですね^^ コントローラかサービスかは、新規で作成するのであればサービス側にします。コントローラはあくまでもルーティングに徹してほしいためです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/04/05 15:10
2018/04/05 21:46
2018/04/07 06:20
2018/04/13 15:11
2018/04/16 02:00
2018/04/18 09:14