在Spring MVC中启用事务

时间:2015-06-02 12:16:07

标签: spring-mvc transactions spring-transactions

我的应用程序运行良好,但我不确定为什么我需要配置我的方式。 问题是必须在两个上下文(root和dispatcher)中启用事务。

为什么这有必要?

应用程序配置如下:

public class MvcInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

    @Override
    protected Class<?>[] getRootConfigClasses () {
        return new Class<?>[] {RootConfig.class};
    }

    @Override
    protected Class<?>[] getServletConfigClasses () {
        return new Class<?>[] {WebMvcConfig.class};
    }
}

然后

@Configuration
@Import(value = {
    DataSourceConfig.class,
    JpaConfig.class,
    SecurityConfig.class
})
@ComponentScan(
    basePackages = {"com.**.service", "com.**.mail", "com.core.config"},
    excludeFilters = {
        @Filter(Configuration.class),
        @Filter(Controller.class),
        @Filter(RestController.class)
    })
@EnableAsync
@EnableScheduling
@EnableAspectJAutoProxy
@EnableTransactionManagement
public class RootConfig {
    // Beans Config...
}

最后

@Configuration
@ComponentScan(basePackages = {"com.web"})
@EnableWebMvc
@EnableTransactionManagement
public class WebMvcConfig extends WebMvcConfigurerAdapter {
    // Beans Config ...
}

注意:

  • 只在服务层管理交易。
  • 两个配置中都存在@EnableTransactionManagement 类。

如果删除WebMvcConfig中的那个,则从Controller类加入时,不会在服务层中注入事务。即使服务层由根上下文扫描。

如果我删除了RootConfig中的那个,那么当Spring Security加入时,不会在服务层中注入事务。

有没有办法在全球范围内启用交易?

0 个答案:

没有答案