Quelle est la portée de @EnableTransactionManagement?
J'essaie de comprendre où est le bon endroit pour mettre @EnableTransactionManagement
annotation dans le cas de plusieurs JavaConfig contextes?
Envisager scénario suivant: j'ai JPA config JPAConfig.java et AppConfig.java avec jeu de service de haricots. Alors je compose à l'ensemble de l'application config RootConfig.java.
Je définir le gestionnaire de transactions au sein de JPAConfig.java ainsi que de permettre la numérisation de JPA dépôts - comme ceux d'exposer transactionnelle comportement, j'ai mis @EnableTransactionManagement
sur JPAConfig et il fonctionne.
Cependant, certains de service haricots doivent aussi avoir les méthodes transactionnelles par exemple en accédant à plusieurs référentiels au sein d'une même transaction. Dois-je aussi mettre @EnableTransactionManagement
sur AppConfig ainsi? La recherche dans la mise en œuvre de cette annotation est me semble qu'une telle approche serait la cause de la redéfinition de certaines fèves. Et effectivement ne semble pas fonctionner pour moi.
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories("com.mypackage.repositories")
public class JPAConfig {
//... here are EntityManager and PlatformTransactionManager beans
}
@Configuration
@ComponentScan("com.mypackage.services")
//@EnableTransactionManagement //- ???
public class AppConfig {
}
@Configuration
@Import({AppConfig.class, JPAConfig.class})
public class RootConfig {
}
Apprécier des conseils.
- Cette annotation ajoute la gestion des transactions des trucs à l'ensemble du contexte de l'application. C'est son champ d'application.
- Mais il ne semble pas permettre de transaction annotations de traitement pour l'ensemble des RootConfig. Au moins, il ne fonctionne pas pour moi.
Vous devez vous connecter pour publier un commentaire.
Après quelques expériences, il me semble avoir trouvé la réponse moi-même:
@EnableTransactionManagement
sur chaquedans le contexte de la configuration, bien qu'il ne importe comment en ce début d'
l'annotation est découvert qu'il enregistre
internalTransactionAdvisor
qui, de fait, les processus de
@Transactional
des annotations sur les créé des haricots.@Import
déclaration de manièreque
PersistenceConfig
qui détient@EnableTransactionManagement
est l'd'abord. Après cela, les haricots provenant d'autres pièces peuvent utiliser l'AOP déclarative
des transactions.
@EnableTransactionManagement
et@EnableGlobalMethodSecurity
. Méthode globale de sécurité utilise des fèves de post-traitement qui semble avoir besoin de toute la configuration de la sécurité pour être branché. BeanPostProcessors sont créés au début sur le contexte de la start-up de sorte que vous ne pouvez pas utiliser déclarative@Transactional
dans les bean qui seraient nécessaires à l'amorçage de la sécurité printemps (dans mon casUserDetailsContextMapper
) - conseiller n'est pas encore créé alors!