我有一个Spring 4.3应用程序,配置简单,我希望我的服务类方法是事务性的,所以我在配置中启用事务管理,然后用@Transactional注释我的服务方法。我从我的控件中调用服务方法,但他们没有按预期行事。当方法的某些部分抛出异常回滚时,永远不会调用
AppInitializer.class:
@EnableTransactionManagement
public class AppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class<?>[]{WebConfig.class};
}
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class<?>[]{RootConfig.class, SecurityConfig.class};
}
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
}
RootConfig.class:
@Configuration
@EnableJpaRepositories(basePackages"package.repository"})
public class RootConfig {
@Bean
public DataSource dataSource() {
...
return dataSource;
}
@Bean
public JpaVendorAdapter jpaVendorAdapter() {
...
return hibernateJpaVendorAdapter;
}
@Bean
public EntityManagerFactory entityManagerFactory() {
LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
...
return factory.getObject();
}
@Bean
public JpaTransactionManager transactionManager() {
return new JpaTransactionManager(entityManagerFactory());
}
}
有没有人知道这里有什么问题
GitHub链接https://github.com/VadOs1/TRANSACTIONAL-ISSUE/
由于
答案 0 :(得分:1)
你可以从AppInitializer类中删除@EnableTransactionManagement注释并在RootConfig类中启用它,并告诉我这是否适合你
即
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(basePackages"package.repository"})
public class RootConfig {
@Bean
public DataSource dataSource() {
...
return dataSource;
}
@Bean
public JpaVendorAdapter jpaVendorAdapter() {
...
return hibernateJpaVendorAdapter;
}
@Bean
public EntityManagerFactory entityManagerFactory() {
LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
...
return factory.getObject();
}
@Bean
public JpaTransactionManager transactionManager() {
return new JpaTransactionManager(entityManagerFactory());
}
}