簡體   English   中英

Spring 4 @Transactional無法正常工作

[英]Spring 4 @Transactional doesn't work

我有一個配置簡單的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/

謝謝

您可以從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());
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM