@EnableTransactionManagementはSpring Bootで必要ですか?私はいくつかの研究をしました。 Spring Bootで既に有効になっているため、不要だと言う人もいれば、明示的に使用する必要があると言う人もいます。それではどうですか?
おそらくあなたもSpring Dataを使用しているでしょう。 Spring Dataリポジトリの呼び出しは、@ EnableTransactionManagementがなくても、デフォルトでトランザクションに囲まれています。 Spring Dataが既存のトランザクションを見つけると、既存のトランザクションが再利用されます。それ以外の場合は、新しいトランザクションが作成されます。
ただし、独自のコード内の@Transactionalアノテーションは、@ EnableTransactionManagementがアクティブになっている(または他の方法でトランザクションを構成している)場合にのみ評価されます。
Application.propertiesに次のプロパティを追加すると、トランザクションの動作を簡単に追跡できます。
logging.level.org.springframework.transaction.interceptor=TRACE
( ログにSpringトランザクションを表示 を参照)
> https://spring.io/guides/gs/managing-transactions/
Spring Boot willクラスパスとh2でspring-jdbcを検出し、DataSourceとJdbcTemplateを自動的に作成します。このようなインフラストラクチャが利用可能になり、専用の構成がないため、DataSourceTransactionManagerも作成されます:これは@Transactionalアノテーション付きメソッドをインターセプトするコンポーネントです。
spring-boot-starter-actuatorを使用して、コンテキストで作成されたBeanをリストすることもできます。
bean ":" transactionManager "
少し古い記事ですが、以前に与えられた答えは、私がそれを探していたとき、簡単ではありませんでした。
@EnableTransactionManagement
は、spring-data *またはspring-txがクラスパスにある場合、Springブートではオプションです。使い方?以下のように:
Spring bootは、クラスパスにspring-boot-autoconfigure.jarを追加します。 META-INFのspring.factoriesファイルに移動すると、org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration
エントリが表示されます。これにより、トランザクションの自動構成が初期化されます。
クラスには次の行があることに注意してください:(スニペット)
@Configuration
@ConditionalOnClass({PlatformTransactionManager.class})
@AutoConfigureAfter({JtaAutoConfiguration.class, HibernateJpaAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class, Neo4jDataAutoConfiguration.class})
@EnableConfigurationProperties({TransactionProperties.class})
public class TransactionAutoConfiguration {
..
}
TransactionAutoConfiguration
を見て、PlatformTransactionManager
がクラスパスで使用可能な場合にトランザクションサポートが有効になることを確認してください。 EnableTransactionManagementConfiguration
もそこに設定されています。
@EnableTransactionManagement
はデフォルトでオンになっています。以下を参照してください。 https://github.com/jkubrynski/spring-boot/commit/9d219ef7a004c58a88bbbef82a520a22961c9402
クラスorg.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration
には、そのようなコードがあります(Spring Boot 1.5+):
@Configuration
@EnableTransactionManagement(proxyTargetClass = false)
@ConditionalOnProperty(prefix = "spring.aop", name = "proxy-target-class", havingValue = "false", matchIfMissing = false)
public static class JdkDynamicAutoProxyConfiguration {
}
@Configuration
@EnableTransactionManagement(proxyTargetClass = true)
@ConditionalOnProperty(prefix = "spring.aop", name = "proxy-target-class", havingValue = "true", matchIfMissing = true)
public static class CglibAutoProxyConfiguration {
}
デフォルトはspring.aop.proxy-target-class=true
で、デフォルトでCGLIBプロキシを有効にします。 JDKプロキシを使用する場合は、代わりにspring.aop.proxy-target-class=false
を設定します。