public interface TransactionManagementConfigurer
EnableTransactionManagement
アノテーションが付けられた @Configuration
クラスによって実装されるインターフェースで、デフォルトの PlatformTransactionManager
Bean を明示的に指定する必要があります。これは、型によるルックアップのデフォルトのアプローチとは対照的に、アノテーション駆動型トランザクション管理に使用されます。これが必要になる理由の 1 つは、コンテナーに 2 つの PlatformTransactionManager
Bean が存在する場合です。 一般的な例とコンテキストについては、@EnableTransactionManagement
を参照してください。詳細な手順については、annotationDrivenTransactionManager()
を参照してください。
型別のルックアップの明確化の場合、このインターフェースを実装するための代替アプローチは、問題のある PlatformTransactionManager
@Bean
メソッドの 1 つを @Primary
としてマークすることです。これは、PlatformTransactionManager
Bean の早期初期化につながらないため、一般的にも好まれます。
EnableTransactionManagement
, Primary
修飾子と型 | メソッドと説明 |
---|---|
PlatformTransactionManager | annotationDrivenTransactionManager() アノテーション駆動型データベースのトランザクション管理に使用するデフォルトのトランザクションマネージャー Bean を返します。 |
PlatformTransactionManager annotationDrivenTransactionManager()
@Transactional
メソッドを処理するときに使用するデフォルトのトランザクションマネージャー Bean を返します。この方法を実装するには、2 つの基本的な方法があります。
@Bean
でアノテーションを付けます@Configuration
クラスはこのメソッドを実装し、@Bean
でマークを付け、メソッド本体内で直接トランザクションマネージャーを構成して返します。@Bean @Override public PlatformTransactionManager annotationDrivenTransactionManager() { return new DataSourceTransactionManager(dataSource()); }
@Bean
なしでメソッドを実装し、別の既存の @Bean
メソッドに委譲する
@Bean
public PlatformTransactionManager txManager() {
return new DataSourceTransactionManager(dataSource());
}
@Override
public PlatformTransactionManager annotationDrivenTransactionManager() {
return txManager(); // reference the existing @Bean
method above
}
アプローチ #2 を採用する場合、@Bean
でマークされているメソッドが 1 つだけであることを確認してください。 いずれのシナリオ #1 または #2 でも、すべての PlatformTransactionManager
実装は InitializingBean
や BeanFactoryAware
などの Spring ライフサイクルコールバックを利用するため、PlatformTransactionManager
インスタンスがコンテナー内で Spring Bean として管理されることが重要です。