2016-09-27 13 views
1

私たちは、コマンドとクエリの分離方法でデータベースレイヤーへの書き込みと読み取りを行うクラスをいくつか持っています。spring @ Transactionalアノテートされたメソッドを1つのトランザクションで実行する

これらのクラスのそれぞれには、@Transactionalで@Transactional(readOnly = true)というアノテーションが付けられています。

これで、多くのオブジェクトを作成し、コマンドレイヤーを使用してデータベースに書き込むデータインポートを実装しました。

今のところ、1つのオブジェクトの書き込みはそれぞれの中でで実行されていますが、これは主要なパフォーマンスのキラーです。

1つのトランザクションでを何度も実行しても、コマンドレイヤーで多くの@Transactional注釈付きメソッドを何度も呼び出すにもかかわらず、データインポートクラスに注釈を付ける簡単な方法はありますか?

これは挿入パフォーマンスを向上させる有効なアプローチですか、これは悪い考えですか?

+4

親メソッドに注釈を付けるだけです。それらをすべてと呼ぶもの。 1つのトランザクションでこれをすべて実行すると、実際にはたくさんのものが一緒に処理されるので、実際には好ましいでしょう... –

+0

私はすでにこれを試しましたが、一見無意味ですが、そうではありません。 \ @トランザクションメソッドを別のインスタンスから呼び出すと、自動的に新しいトランザクションが作成されます。 – SebastianRiemer

+0

に依存します。あなたのメソッドでは、 'インターフェイス'を介してautowired? AspectJ製織を使用していますか? –

答えて

0

Mistake One:私はこの投稿にあるようにExecutorServiceを使用しました。How to use spring transaction in multithreadスプリングはトランザクションと組み合わせてマルチスレッドをサポートしていません。

間違い2:Spring管理クラスメソッドと呼ばれるExecutorServiceを@Transactionalアノテーションで直接置き換えましたが、今回はクラスが呼び出し元クラス内でネストされているため動作しませんでした。外部から電話する。

関連する問題