インターフェース TransactionManagementConfigurer


public interface TransactionManagementConfigurer
アノテーション駆動型トランザクション管理で使用するデフォルトの PlatformTransactionManager Bean(または ReactiveTransactionManager Bean)を明示的に指定するためのインターフェースを実装します。これは、デフォルトの型別ルックアップ方式とは対照的です。コンテナー内に 2 つの PlatformTransactionManager Bean(または 2 つの ReactiveTransactionManager Bean)が存在する場合、このインターフェースが必要になる可能性があります。

通常、@EnableTransactionManagement アノテーションが付与された @Configuration クラスによって実装されます。一般的な例とコンテキストについては @EnableTransactionManagement を参照してください。詳細な手順については annotationDrivenTransactionManager() を参照してください。

注意: TransactionManagementConfigurer は早期に初期化されます。共通の依存関係をオートワイヤーフィールドに直接挿入しないでください。代わりに、それらに対して遅延 ObjectProvider を宣言することを検討してください。

型別ルックアップの明確化の場合、このインターフェースを実装するための代替アプローチは、問題のある PlatformTransactionManager @Bean メソッド(または ReactiveTransactionManager @Bean メソッド)の 1 つを @Primary としてマークすることです。これは、TransactionManager Bean の早期初期化につながらないため、一般的にも好まれます。

導入:
3.1
作成者:
Chris Beams
関連事項:
  • 方法の概要

    修飾子と型
    メソッド
    説明
    アノテーション駆動型データベースのトランザクション管理に使用するデフォルトのトランザクションマネージャー Bean を返します。
  • メソッドの詳細

    • annotationDrivenTransactionManager

      TransactionManager annotationDrivenTransactionManager()
      アノテーション駆動型データベースのトランザクション管理に使用する、つまり @Transactional メソッドを処理するときに使用するデフォルトのトランザクションマネージャー Bean を返します。

      この方法を実装するには、2 つの基本的な方法があります。

      1. Implement the method and annotate it with@Bean

      この場合、実装する @Configuration クラスはこのメソッドを実装し、@Bean でマークを付け、メソッド本体内で直接トランザクションマネージャーを構成して返します。
      @Bean
      @Override
      public PlatformTransactionManager annotationDrivenTransactionManager() {
          return new DataSourceTransactionManager(dataSource());
      }

      2. Implement the method without@Beanand delegate to another existing@Beanmethod

      @Bean
      public PlatformTransactionManager txManager() {
          return new DataSourceTransactionManager(dataSource());
      }
      
      @Override
      public PlatformTransactionManager annotationDrivenTransactionManager() {
          return txManager(); // reference the existing @Bean method above
      }
      アプローチ #2 を採用する場合、@Bean でマークされているメソッドが 1 つだけであることを確認してください。

      ほとんどの PlatformTransactionManager 実装は InitializingBean や BeanFactoryAware などの Spring ライフサイクルコールバックを利用するため、どちらのシナリオ #1 または #2 でも、PlatformTransactionManager インスタンスがコンテナー内で Spring Bean として管理されることが重要です。ReactiveTransactionManager Bean にも同じガイドラインが適用されることに注意してください。

      戻り値:
      PlatformTransactionManager または ReactiveTransactionManager 実装