インターフェース TransactionManagementConfigurer
public interface TransactionManagementConfigurer
@
EnableTransactionManagement でアノテーションされた @Configuration クラスが、アノテーション駆動型のトランザクション管理に使用するデフォルトの PlatformTransactionManager Bean(または ReactiveTransactionManager Bean)を明示的に指定したい(または指定する必要がある)場合に実装されるインターフェースです。これが必要な理由の 1 つは、コンテナー内に 2 つの PlatformTransactionManager ビーン (または 2 つの ReactiveTransactionManager Bean) が存在する場合です。 一般的な例とコンテキストについては、@EnableTransactionManagement を参照してください。詳細な手順については、annotationDrivenTransactionManager() を参照してください。
 注意: TransactionManagementConfigurer は早期に初期化されます。共通の依存関係をオートワイヤーフィールドに直接挿入しないでください。代わりに、それらに対して遅延 ObjectProvider を宣言することを検討してください。
 型別ルックアップの明確化の場合、このインターフェースを実装するための代替アプローチは、問題のある PlatformTransactionManager @Bean メソッド(または ReactiveTransactionManager @Bean メソッド)の 1 つを @Primary としてマークすることです。これは、TransactionManager Bean の早期初期化につながらないため、一般的にも好まれます。
- 導入:
- 3.1
- 作成者:
- Chris Beams
- 関連事項:
- メソッドのサマリー修飾子と型メソッド説明アノテーション駆動型データベースのトランザクション管理に使用するデフォルトのトランザクションマネージャー Bean を返します。
- メソッドの詳細- annotationDrivenTransactionManagerTransactionManager 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アプローチ #2 を採用する場合、- @Beanmethod above }- @Beanでマークされているメソッドが 1 つだけであることを確認してください。- ほとんどの - PlatformTransactionManager実装は- InitializingBeanや- BeanFactoryAwareなどの Spring ライフサイクルコールバックを利用するため、どちらのシナリオ #1 または #2 でも、- PlatformTransactionManagerインスタンスがコンテナー内で Spring Bean として管理されることが重要です。- ReactiveTransactionManagerBean にも同じガイドラインが適用されることに注意してください。