Spring mvc 在SpringMVC中启用事务

Spring mvc 在SpringMVC中启用事务,spring-mvc,transactions,spring-transactions,Spring Mvc,Transactions,Spring Transactions,我的应用程序运行得很好,但我不确定为什么我需要这样配置。 问题是必须在根和调度程序这两种上下文中启用事务 为什么必须这样做? 应用程序的配置如下: public class MvcInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { @Override protected Class<?>[] getRootConfigClasses () { retur

我的应用程序运行得很好,但我不确定为什么我需要这样配置。 问题是必须在根和调度程序这两种上下文中启用事务

为什么必须这样做?

应用程序的配置如下:

public class MvcInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

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

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

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

  • 事务只是在服务层中进行管理
  • 两个配置中都存在
    @EnableTransactionManagement
    上课
如果我删除
WebMvcConfig
中的一个,那么当从
Controller
类访问时,事务将不会注入服务层。即使服务层由根上下文扫描

如果我删除了
RootConfig
中的一个,事务将不会被注入服务层,例如由Spring Security进行访问时


有什么方法可以全局启用事务吗?

您不应该只在根上下文中的一个上同时启用事务。您可能需要扫描两次相同的组件,最后两次实例化应用程序的一部分(服务,DAO)。由root(
ContextLoaderListener
)和servlet(
DispatcherServlet
)执行一次。从你描述的症状来看。我完全同意,但仍然找不到原因。因为你有一个
@CompontScan
,在这两种情况下都扫描相同的组件,可能会选择一个额外的配置类或类似的东西。但是您正在创建同一组件的实例两次。您不应该只在根上下文中的一个组件上同时创建它们。您可能需要扫描两次相同的组件,最后两次实例化应用程序的一部分(服务,DAO)。由root(
ContextLoaderListener
)和servlet(
DispatcherServlet
)执行一次。从你描述的症状来看。我完全同意,但仍然找不到原因。因为你有一个
@CompontScan
,在这两种情况下都扫描相同的组件,可能会选择一个额外的配置类或类似的东西。但是您正在创建同一组件的实例两次。您不应该只在根上下文中的一个组件上同时创建它们。您可能需要扫描两次相同的组件,最后两次实例化应用程序的一部分(服务,DAO)。由root(
ContextLoaderListener
)和servlet(
DispatcherServlet
)执行一次。从你描述的症状来看。我完全同意,但仍然找不到原因。因为你有一个
@CompontScan
,在这两种情况下都扫描相同的组件,可能会选择一个额外的配置类或类似的东西。但您要创建同一组件的实例两次。
@Configuration
@ComponentScan(basePackages = {"com.web"})
@EnableWebMvc
@EnableTransactionManagement
public class WebMvcConfig extends WebMvcConfigurerAdapter {
    // Beans Config ...
}