質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

トランザクション

トランザクションとは、関連・依存する処理を一連の不可分な処理単位として扱う処理方式を指します。トランザクションとして管理された処理は「すべて成功」か「すべて失敗」のいずれかであることが保証される。処理に失敗した場合は、一連の処理がロールバックされます。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

Q&A

1回答

4786閲覧

springbootのトランザクション管理について

a0841_1974

総合スコア29

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

トランザクション

トランザクションとは、関連・依存する処理を一連の不可分な処理単位として扱う処理方式を指します。トランザクションとして管理された処理は「すべて成功」か「すべて失敗」のいずれかであることが保証される。処理に失敗した場合は、一連の処理がロールバックされます。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

0グッド

0クリップ

投稿2018/04/05 09:23

いつもお世話になっております。

springboot2、MyBatis、PostgreSQLを使用して
業務システムを作る行う予定です。

トランザクション管理を、
transactionManager.begin()、commit()、rollback()で制御するか
@Transactionalアノテーションで制御するか
を、悩んでおります。

一般的にどちらで制御するのが、よいのでしょうか。

以上です。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

基本的にはフレームワークに任せたほうが良いと思います。
Controller でかけるか、Serviceでかけるかは私も皆様の意見をお聞きしたいと思います。

投稿2018/04/05 09:49

euledge

総合スコア2404

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

a0841_1974

2018/04/05 15:10

ご回答ありがとうございます。 PostgreSQLはストアドプロシージャも使用する予定です。 ストアドプロシージャの戻り値により、COMMIT、ROLLBACKを考えておりますが、 その際も@Transactionalを使用して制御したほうがよいのでしょうか。
euledge

2018/04/05 21:46

transaction管理が必要な処理の範囲をメソッドにして、そのメソッドに@transactionalをつけます。 rollbackが必要になったらそのメソッド内で非検査例外を投げればrollbackされますよ。
a0841_1974

2018/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_1974

2018/04/13 15:11

実際に上記プログラムを作成してみました。 @Transactionalは、以下のように登録しています。 @Transactional(isolation=Isolation.READ_COMMITTED,propagation=Propagation.REQUIRED) この状態で1つ目、2つ目ともに同じレコードに対して、UPDATEを実施したところ、 1つ目の処理が終わるまで、2つ目の処理は実施されず待っておりました。 おそらく1つ目のDBのCOMMIT処理が終わるまでは、2つ目のDBのCOMMIT処理が出来ず待っている状態であるかと思います。 予想通りの動きでよかったです。
Groove

2018/04/16 02:00

自分はアノテーションによるトランザクション制御のためにspringを使っているといっても過言ではないくらいですね^^ コントローラかサービスかは、新規で作成するのであればサービス側にします。コントローラはあくまでもルーティングに徹してほしいためです。
a0841_1974

2018/04/18 09:14

ご連絡ありがとうございます。 私もアノテーションを使用して、開発をしようと考えております。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問