@EnableTransactionManagement est-il requis dans Spring Boot? J'ai fait des recherches. Certains disent que vous n'en avez pas besoin, comme Spring Boot l'a déjà activé, d'autres disent que vous devez l'utiliser explicitement. Alors c'est comment?
Réponses
Trop de publicités?Probablement vous êtes également à l'aide de Données du Printemps. Les appels de Printemps, référentiels de Données sont, par défaut, entouré par une transaction, même sans @EnableTransactionManagement. Si le Printemps de Données conclut une transaction existante, la transaction sera ré-utilisé, sinon, une nouvelle transaction est créée.
@Transactional annotations à l'intérieur de votre propre code, cependant, ne sont évalués que lorsque vous avez @EnableTransactionManagement activé (ou la configuration de la gestion des transactions d'une autre façon).
Vous pouvez facilement tracer le comportement de transaction par l'ajout de la propriété suivante à votre application.propriétés:
logging.level.org.springframework.transaction.interceptor=TRACE
Selon > https://spring.io/guides/gs/managing-transactions/
Spring Boot va détecter printemps-jdbc dans le classpath et h2 et créer une source de données et un JdbcTemplate automatiquement pour vous. Parce que ce type d'infrastructure est maintenant disponible et vous n'avez pas de configuration dédié, un DataSourceTransactionManager sera également créé pour vous: c'est le composant qui intercepte le @Transactional méthode annotée.
Vous pouvez également utiliser le printemps-amorçage-starter-actionneur de la liste de vos haricots créé dans votre contexte, et vous le trouverez
bean": "transactionManager"
Peu vieux post, mais les réponses données précédemment ne sont pas droites vers l'avant lorsque j'étais à la recherche pour elle.
@EnableTransactionManagement
est facultatif au Printemps de démarrage, à condition que le printemps de données* ou printemps-tx sont trouvés dans le classpath. Comment cela fonctionne? Comme ci-dessous:
Printemps de démarrage ajoute un spring-boot-autoconfigure.jar dans le classpath. Aller à la META-INF du printemps.les usines de fichier et vous pouvez voir org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration
entrée là. Ce initialise l'opération de configuration automatique pour vous.
Notez que la classe a des lignes suivantes: (extrait)
@Configuration
@ConditionalOnClass({PlatformTransactionManager.class})
@AutoConfigureAfter({JtaAutoConfiguration.class, HibernateJpaAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class, Neo4jDataAutoConfiguration.class})
@EnableConfigurationProperties({TransactionProperties.class})
public class TransactionAutoConfiguration {
..
}
Jetez un oeil à l' TransactionAutoConfiguration
pour voir ce qu'elle permet transacton de soutien si l' PlatformTransactionManager
est disponible dans le classpath. EnableTransactionManagementConfiguration
est également configuré.
Dans la classe org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration
, il existe un tel code (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 {
}
La valeur par défaut est spring.aop.proxy-target-class=true
, activant le proxy CGLIB par défaut. Si vous souhaitez utiliser le proxy JDK, définissez spring.aop.proxy-target-class=false
place.