@Transactional 在 Spring 引导中不起作用
@Transactional do not work in Spring Boot
我想在 spring 引导中使用 @Transactional,但是经过几次尝试后,尽管内部有一个异常要回滚,我还是无法使事务正常工作,所以我缺少一些东西?
AppConfig.java
@EnableAutoConfiguration
@ComponentScan(basePackages = { "com.geopro" })
@EnableJpaRepositories(basePackages = { "com.geopro.repositories" })
@EntityScan(basePackages = { "com.geopro.entities" })
@EnableTransactionManagement
public class AppConfig {
@Bean
public HibernateJpaSessionFactoryBean sessionFactory(EntityManagerFactory emf) {
HibernateJpaSessionFactoryBean factory = new HibernateJpaSessionFactoryBean();
factory.setEntityManagerFactory(emf);
return factory;
}
}
Metier.java
@Service("metier")
@Aspect
public class Metier {
@Transactional(readOnly = false , rollbackFor = Exception.class)
public void saveUpload(UploadData post) throws Exception {
try {
post.ADDEDDATA.savesync();
post.UPDATEDDATA.savesync();
} catch (Exception e) {
throw e ;
}
}
我的问题交易不工作的原因是在同一个 class 中混合了 AspectJ 建议和交易,所以这个选项 @EnableTransactionManagement(proxyTargetClass=true)
强制交易工作但是,禁用 AspectJ 建议即使你放置他们在专用的 class.
所以这个问题的最佳解决方案是将 AspectJ 通知放在专用的 Class 中,这样事务和 AspectJ 通知将按预期工作。
我想在 spring 引导中使用 @Transactional,但是经过几次尝试后,尽管内部有一个异常要回滚,我还是无法使事务正常工作,所以我缺少一些东西?
AppConfig.java
@EnableAutoConfiguration
@ComponentScan(basePackages = { "com.geopro" })
@EnableJpaRepositories(basePackages = { "com.geopro.repositories" })
@EntityScan(basePackages = { "com.geopro.entities" })
@EnableTransactionManagement
public class AppConfig {
@Bean
public HibernateJpaSessionFactoryBean sessionFactory(EntityManagerFactory emf) {
HibernateJpaSessionFactoryBean factory = new HibernateJpaSessionFactoryBean();
factory.setEntityManagerFactory(emf);
return factory;
}
}
Metier.java
@Service("metier")
@Aspect
public class Metier {
@Transactional(readOnly = false , rollbackFor = Exception.class)
public void saveUpload(UploadData post) throws Exception {
try {
post.ADDEDDATA.savesync();
post.UPDATEDDATA.savesync();
} catch (Exception e) {
throw e ;
}
}
我的问题交易不工作的原因是在同一个 class 中混合了 AspectJ 建议和交易,所以这个选项 @EnableTransactionManagement(proxyTargetClass=true)
强制交易工作但是,禁用 AspectJ 建议即使你放置他们在专用的 class.
所以这个问题的最佳解决方案是将 AspectJ 通知放在专用的 Class 中,这样事务和 AspectJ 通知将按预期工作。