問題タブ [spring-transactions]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
9461 参照

spring - Spring アノテーションベースのトランザクションで分離レベルを設定する

私は自分のプロジェクトで注釈ベースのトランザクション管理を使用しています (@Transactional でいくつかのメソッドに注釈を付けています)。分離レベルをグローバルに設定したいと思います(各 @Transactional アノテーションの引数としてではなく)。

XMLでそれを構成することは可能ですか? 現在、私のxml構成には含まれています

何らかの方法で分離を tx:annotation-driven に追加することは可能ですか?

0 投票する
1 に答える
3148 参照

java - spring データ ソース トランザクション マネージャーがロールバックしない

こんにちは、

Spring のトランザクション管理機能をテストしようとしていますが、機能させることができません。私は何時間もそれを解決しようとしてきましたが、運がありません。

上に、関連する config xml 定義と dao テスト クラスが表示されます。ロギングにデバッグ レベルを使用しても、ロールバック メカニズムの痕跡はありません。

どんな助けでも大歓迎です

0 投票する
2 に答える
8157 参照

java - ファイルを閉じるメソッドから IOException がスローされた場合のトランザクション (ファイル IO を含む) を管理する方法

私は最近、Spring の Data Source Transaction Manager を使い始めました。今問題があります。私のトランザクションには、DB テーブルへの更新とファイルへの書き込み操作が含まれます。

正常に動作しますが、ファイル I/O について疑問があります。以下に示すように、Bean の openFile メソッドと closeFile メソッドをそれぞれ init-method と destroy-method として構成しました。これにより、コンストラクターとデストラクターのように呼び出されるメソッドが提供されます。ファイルが適切に閉じられていない場合、一部のレコードが output.txt ファイルに正常に書き込まれていない可能性があります。これは、トランザクション管理も適切に処理できていないことを意味します。

ただし、フラット ファイルに追加されていない DB 更新をロールバックしたいと考えています。私の解決策では、 fileClose メソッドをトランザクションに追加することは不可能に見えます。この望ましいアクションを適切に実装する方法を知っている人はいますか?

どんな提案でも大歓迎です

0 投票する
3 に答える
3717 参照

transactions - Spring Batch のチャンク指向処理戦略のロールバック機構

ご存知のように、Spring バッチはバージョン 2.0 以降、チャンク指向の処理を使用しています。

アイテム ライターで例外が発生した場合、データ ソース トランザクション マネージャーはチャンク全体または関連アイテムのみをロールバックするということですか?

実際に試してみたところ、フレームワークがチャンク全体をロールバックすることがわかりました。最後のアイテムで例外がスローされたときに、正常に処理された 499 個のアイテムが 500 個のアイテムで構成されるチャンクにロールバックされることを望まないため、これは必要ありません。

私が見つけた唯一の解決策は、以下の属性をタスクレットに追加することです。ただし、これが正しいことかどうかはわかりません。

もう 1 つの意見は、単にチャンク サイズを 1 に減らすことでしたが、これもあまり意味がありません。

おそらく、Spring Batch は私の問題ドメインには適していません。もしそうなら、そのようなフレームワーク固有の動作にもう苦労しないように教えてください。

どんな提案でも大歓迎です。

0 投票する
2 に答える
3241 参照

hibernate - Hibernate と Spring - ロード操作はトリックを実行し、更新/削除操作は実行しません

私はこのチュートリアルに従っています: http://www.scribd.com/doc/25244173/Java-Struts-Spring-Hibernate-Tutorial セットアップ (前述) はチュートリアル ファイルで正常に機能していましたが、変更-削除/更新アクションは発生しません。エラーや癖はありません。完全に無視されます。データの取得に関しては、すべてが完全に機能します..

tut のほとんどすべてのファイルは同じですが、これらの違いがあります。このチュートリアルでは、サービス ファイルを使用します。

Services.java

親コントローラーと HibernateUtil への静的呼び出しを使用して、ファイルを分離しようとしました: HibernateUtil.java

BaseController.java

EventController.java

そして春のapplicationContext.xml

0 投票する
5 に答える
3821 参照

java - Java でのプログラミングのようなトランザクション

Javaでトランザクションのような機能を実現したい。データベースを更新する操作、キューに挿入する操作、別のデータ構造を更新する操作などのような ` n ' 操作を実行したいのですが、これらの操作はすべて 1 つのトランザクションとして動作する必要があります。操作は正常に実行される必要があります。そうでない場合、1 つが失敗すると、すべてが失敗するはずです。強引なアプローチの 1 つは、try-catch ブロックを記述し、catch ブロック内のすべての操作を元に戻すことです。この種の問題を解決するための指針はありますか? これを達成するためのパターンやライブラリはありますか?

0 投票する
1 に答える
4427 参照

java - Spring Jdbc宣言型トランザクションが作成されましたが、何も実行されていません

SpringベースのWebアプリケーション内で宣言型トランザクション管理を構成しようとしましたが、協力できません。

私には2つの主な問題があります:

  1. dataSource(アプリケーションに必要)でdefaultAutoCommitをfalseに設定すると、トランザクションが含まれるかどうかに関係なく、すべてのクエリがロールバックされます。
  2. トランザクションが構成され、プロキシクラスとトランザクションメソッドが作成されますが、トランザクションは使用されていないようです。

最初の問題は、個々のクエリがすべてデータベースでロールバックされるため、かなり複雑です。これには、SELECTステートメントも含まれます。すべてのクエリがデータベースでロールバックされる原因は何ですか?

2番目の問題については、トランザクション管理の構成の概要を以下に示します。

applicationContext.xml

この問題を解決するために私が訪れたすべてのチュートリアルとフォーラムから、私の構成は正しいはずだと思います。しかし、私はaopとspringのトランザクションを完全には理解していないので、重要な何かを見逃している可能性があります。

上記でほのめかしたように、ログをトレースして、サービスクラス用に作成されているプロキシとトランザクションメソッドを確認できます。ただし、実際にアプリケーションを実行してログをトレースすると、DataSourceTransactionManagerを処理するステートメントや、作成、コミット、ロールバックなどのトランザクションが表示されません。

実際には何も実行されていないように見えます。さまざまなチュートリアルを実行し、さまざまな方法を試したため、非常に混乱していますが、常にこの状況に陥ります。

また、DataSourceTransactionManagerからメッセージを受信するようにlog4jプロパティが正しく設定されていることもかなり確信していますが、ログエラーだけではないことを確認するために以下に提供しています。

私のlog4jは、トランザクションをトレースするために次のロガーでセットアップされています。

注:ある時点でDEBUGでトップロガーを実行しました。そこで、サービスプロキシが作成されていることを確認しました。

誰かが何が起こっているのかについて何か洞察を持っていますか?トランザクションが作成されている部分がいくつかあるので、現時点ではかなり行き詰まっていますが、トランザクションが使用されている兆候はまったく見られません。

編集

JBNizetから要求された追加情報。

私のアプリケーション全体はアノテーション駆動型であるため、サービスBeanは@Serviceでアノテーションが付けられ、名前ベースの自動配線を介してコントローラーに注入されます。

以下は私のサービスクラスの1つの例です(名前は変更されていますが、私のapplicationContext.xmlを反映します)。

ご覧のとおり、私のサービスクラスは、コントローラークラスとdaoクラスの間のプロキシにすぎません。DAOは、私が実際にデータベース接続を処理する場所です。

トランザクションを処理するときは、daoクラスではなく、サービスをトランザクションにすることが好ましい方法であるとどこかで読んだと思います。私が間違っている場合は訂正してください。

ZapDAOクラスの概要を以下に示します。

jdbcTemplateを使用して、接続とクエリを処理します。

0 投票する
2 に答える
6055 参照

spring - Spring 3 でのトランザクション処理の例が必要

spring sqltemplate でトランザクションを処理するには、ステップバイステップのガイドが必要です。プロジェクトにトランザクション処理を実装する必要があります。教えて。SqlTemplate でトランザクション管理を使用する必要があります。

0 投票する
1 に答える
1149 参照

spring-transactions - Spring + JPA + HibernateでSpring 3.0のトランザクションを使用する

現在、プロジェクトでSpring + JPA + hibernateを使用しています。次に、モデルとDAOの実装でデザインパターンを決定します。すべてのトランザクション目的クラスの要約があります。単一の更新/作成/削除タスクを実行するすべてのクラス (サービスとして) は、この抽象クラスから継承する必要があります。

次に、別のクラス(上記のクラスのサブクラス)があります

BusinessTransaction は、1 つのメソッドを持つインターフェースです。

@Transactional (デフォルトでは Propagation.REQUIRED) をクラス SomeTransaction に配置することで、このクラスがトランザクション内にあることを確認したいことに注意してください。

IntegrationTestで使用する場合

その結果、トランザクションは発生しませんでした。また、データをデータベースに挿入するタスクのみを実行する someTransaction.execute がうまく動作していませんでした。

次に、@Transactional アノテーションを SomeTransaction から GlobalAbstractTransaction に移動して、コードが次のようになるようにします。

変更された GlobalAbstractTransaction

変更された SomeTransaction

次に、テスト作業、データがデータベースに挿入されます。

  1. なぜこれが起こっているのか、誰でも説明できます。GlobalAbstractTransaction で既に定義されているため、SomeTransaction.execute に @Transactional を追加できません。代わりに @Transactional add class level を追加できますか?
  2. SomeTransaction はサービスとして計画されており、サービス内でオートワイヤーを使用して DAO 実装をオートワイヤーしました (DAO レベルで @Transactional を配置しません)。これがほとんどの人が推奨する方法です。DAO 実装に @Repository、サービス クラスに @Service という注釈を付けました。(私のサービスでは、InsertingService、UpdatingService、DeletingService という 1 つのタスクのみを実行することに注意してください。これらは 3 つのクラスに分けられます)。Service Facade ([http://java.dzone.com/articles/jpa-implementation-patterns-3][1]) の別のレイヤーを追加する予定です。参照用のリンクを参照してください。だから私はクラスを作成します

    public class ServiceFacadeBean { public void executeTransaction(文字列名) {

    } }

このようなアプリケーションで使用することを意図しています。

実行の実装では、「com.mycompany.SomeTransaction」を使用してリフレクションを使用してインスタンスを作成したいと考えています。しかし、私は常にNullPointerExceptionを取得します

そして、1 つのサービス クラスで、データベースへの挿入などの 1 つのトランザクション タスクのみを実行することを意図しています。@Transactionalを配置するためのベストプラクティス、またはSpringトランザクションを使用したトランザクションの問題について実際によく説明している良いリンクを持っている人

誰でもこれについて経験がありますか、またはより良いデザインパターンソリューションを持っていますか? ありがとう