Java Spring boot多模块servletDispatchers
我有以下项目结构Java Spring boot多模块servletDispatchers,java,spring,spring-mvc,servlets,spring-boot,Java,Spring,Spring Mvc,Servlets,Spring Boot,我有以下项目结构 -Project |-config | |-modules | |-admin | |-web |- platform 平台是包含spring启动类的项目, 平台依赖于config,而config依赖于目录模块中的所有内容 平台也是使用mvn spring boot:run命令启动的模块 我试图实现的是,模块admin和web(都是web应用程序)有自己的映射,如 /管理员 /网 下面的代码表示管理模块中的一个控制器,web模块还包含一个类似
-Project
|-config
| |-modules
| |-admin
| |-web
|- platform
平台是包含spring启动类的项目,
平台依赖于config,而config依赖于目录模块中的所有内容
平台也是使用mvn spring boot:run命令启动的模块
我试图实现的是,模块admin和web(都是web应用程序)有自己的映射,如
- /管理员
- /网
@Configuration
public class Config implements EmbeddedServletContainerCustomizer {
@Autowired
protected WebApplicationContext webApplicationContext;
@Autowired
protected ServerProperties server;
@Autowired(required = false)
protected MultipartConfigElement multipartConfig;
protected DispatcherServlet createDispatcherServlet() {
AnnotationConfigEmbeddedWebApplicationContext webContext = new AnnotationConfigEmbeddedWebApplicationContext();
webContext.setParent(webApplicationContext);
webContext.scan("some.base.package");
return new DispatcherServlet(webContext);
}
protected ServletRegistrationBean createModuleDispatcher(DispatcherServlet apiModuleDispatcherServlet) {
ServletRegistrationBean registration =
new ServletRegistrationBean(apiModuleDispatcherServlet,
"/admin");
registration.setName("admin");
registration.setMultipartConfig(this.multipartConfig);
return registration;
}
@Bean(name = "adminsServletRegistrationBean")
public ServletRegistrationBean apiModuleADispatcherServletRegistration() {
return createModuleDispatcher(createDispatcherServlet());
}
public void customize(ConfigurableEmbeddedServletContainer container) {
container.setContextPath("/admin");
}
}
web模块也有类似的功能
我已经试过实现一些给定的答案
@RequestMapping("/admin")
关于控制器类
我还尝试在application.properties中指定contextPath和servletPath
所以我的问题是:实现我的目标最好的方法是什么,或者我是在尝试使用SpringBoot来完成它不需要的事情
编辑
概念验证很好您应该做的是将AdminController和WebController放在不同的包中
some.base.admin.package
some.base.web.package
在相应的配置中,只扫描所需的包以注册DispatcherServlet
管理配置
webContext.scan("some.base.admin.package");
网络配置
webContext.scan("some.base.web.package");
这样,在相应的WebApplicationContext
中,对于每个DispatcherServlet
只有一个映射可用于“/”
,因此我找到了解决方案。
你可以看看这个
您必须在主应用程序中注册dispatcher servlet,并且不要使用@SpringBootApplication注释
对于完整的示例,只需签出项目并检查代码
编辑:本周晚些时候,我将提供一个详细的答案我将它们放在单独的软件包中,甚至是单独的模块中。扫描方法对我也不起作用。
webContext.scan("some.base.web.package");