メモ。
TL;DR
Spring で使用する@Transactionには、下記のように使用する Manager
を明示できます。
@Transactional("jpaTransactionManager")
複数のTransactionManagerの定義と@Transaction
Springにおける@Transactionは、デフォルトで用意されている一意のTransactionManagerを参照しています。
しかし、下記のように新たにTransactionManagerを@Configurationクラス内で定義したりすると、
protected PlatformTransactionManager getTransactionManager() { return transactionConfig.getJpaTransactionManager(); }
@TransactionはどのTransactionManagerを参照していいのかわからず、下記のようなエラーを吐いてしまいます。
org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'org.springframework.transaction.PlatformTransactionManager' available: expected single matching bean but found 2: transactionManager,getJpaTransactionManager
@Transactionが使用するManagerを明示的に指定するには、@Transactionの引数にTransactionManagerの名称を渡します。@Transactionは指定したTransactionManagerに従い、Transaction管理を実行します。
@Transactional("jpaTransactionManager")