我的应用程序运行良好,但我不确定为什么我需要配置我的方式。 问题是必须在两个上下文(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加入时,不会在服务层中注入事务。
有没有办法在全球范围内启用交易?