spring boot 实现配置多个DispatcherServlet最简单方式

传统的web项目,只需要在web.xml里配置多个即可,并且支持多个url-pattern

在spring boot中,我们默认无需配置,系统会自动装配一个,感兴趣的可以看下源码

org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration

里面有个 DispatcherServletRegistrationBean,关键是这里只能指定一个path,如下的源码截图

如果想要指定多个,我们只能自己写DispatcherServletRegistrationBean这个Bean了,那么系统就不会实例化内置的那个了,如下代码

@Autowired

private WebMvcProperties webMvcProperties;
@Autowired
private MultipartConfigElement multipartConfig;

@Bean @Primary

public DispatcherServletRegistrationBean dispatcherServlet1(DispatcherServlet dispatcherServlet) {
 DispatcherServletRegistrationBean registration = new DispatcherServletRegistrationBean(
   dispatcherServlet, "/*");
 registration.setName("dispatcherServlet1");
 registration.setLoadOnStartup(
   this.webMvcProperties.getServlet().getLoadOnStartup());
 if (this.multipartConfig != null) {
  registration.setMultipartConfig(this.multipartConfig);
 }
 return registration;
}

@Bean

public DispatcherServletRegistrationBean dispatcherServlet2(DispatcherServlet dispatcherServlet) {
 DispatcherServletRegistrationBean registration = new DispatcherServletRegistrationBean(
   dispatcherServlet, "/aaa/*");
 registration.setName("dispatcherServlet2");
 registration.setLoadOnStartup(
   this.webMvcProperties.getServlet().getLoadOnStartup());
 if (this.multipartConfig != null) {
  registration.setMultipartConfig(this.multipartConfig);
 }
 return registration;
}

@Bean

public DispatcherServletRegistrationBean dispatcherServlet3(DispatcherServlet dispatcherServlet) {
 DispatcherServletRegistrationBean registration = new DispatcherServletRegistrationBean(
   dispatcherServlet, "/bbb/*");
 registration.setName("dispatcherServlet3");
 registration.setLoadOnStartup(
   this.webMvcProperties.getServlet().getLoadOnStartup());
 if (this.multipartConfig != null) {
  registration.setMultipartConfig(this.multipartConfig);
 }
 return registration;
}

这样我们参考底层源码,我们做了三个Bean,注意有一个一定要加上@Primary注解,否则启动会有报错。

如果我们系统有一个接口url是/api/test,那么通过/aaa/api/test或者/bbb/api/test也都可以访问了。

不建议的写法、、、

@Bean
 public ServletRegistrationBean apiDispatcherServlet(){
  AnnotationConfigWebApplicationContext applicationContext = new AnnotationConfigWebApplicationContext();
  applicationContext.scan("com.be.edge.asset.web.api");
  DispatcherServlet apiDispatcherServlet = new DispatcherServlet(applicationContext);
  ServletRegistrationBean registrationBean = new ServletRegistrationBean(apiDispatcherServlet);
  registrationBean.addInitParameter("throwExceptionIfNoHandlerFound", "true");
  registrationBean.setLoadOnStartup(1);
  registrationBean.addUrlMappings("/api/*");
  registrationBean.setName("apiDispatcherServlet");
  return registrationBean;
 }
 @Bean
 public ServletRegistrationBean mgmtDispatcherServlet(){
  AnnotationConfigWebApplicationContext applicationContext = new AnnotationConfigWebApplicationContext();
  applicationContext.scan("com.be.edge.asset.web.controller");
  DispatcherServlet apiDispatcherServlet = new DispatcherServlet(applicationContext);
  ServletRegistrationBean registrationBean = new ServletRegistrationBean(apiDispatcherServlet);
  registrationBean.setLoadOnStartup(2);
  registrationBean.addInitParameter("throwExceptionIfNoHandlerFound", "true");
  registrationBean.addUrlMappings("/mgmt/*");
  registrationBean.setName("mngDispatcherServlet");
  return registrationBean;
 }

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。

(0)

相关推荐

  • Spring Boot 中的Servlet简单使用

    当使用spring-Boot时,嵌入式Servlet容器通过扫描注解的方式注册Servlet.Filter和Servlet规范的所有监听器(如HttpSessionListener监听器). Spring boot 的主 Servlet 为 DispatcherServlet,其默认的url-pattern为"/".也许我们在应用中还需要定义更多的Servlet,该如何使用SpringBoot来完成呢? 在spring boot中添加自己的Servlet有两种方法,代码注册Servle

  • 详解在spring boot中配置多个DispatcherServlet

    spring boot为我们自动配置了一个开箱即用的DispatcherServlet,映射路径为'/',但是如果项目中有多个服务,为了对不同服务进行不同的配置管理,需要对不同服务设置不同的上下文,比如开启一个DispatcherServlet专门用于rest服务. 传统springMVC项目 在传统的springMVC项目中,配置多个DispatcherServlet很轻松,在web.xml中直接配置多个就行: <servlet> <servlet-name>restServle

  • SpringBoot配置嵌入式Servlet容器和使用外置Servlet容器的教程图解

    配置嵌入式Servlet容器 SpringBoot默认使用Tomcat作为嵌入式的Servlet容器: 问题? 1).如何定制和修改Servlet容器的相关配置: 1.修改和server有关的配置(ServerProperties[也是EmbeddedServletContainerCustomizer]): server.port=8081 server.context-path=/crud server.tomcat.uri-encoding=UTF-8 //通用的Servlet容器设置 s

  • spring boot 实现配置多个DispatcherServlet最简单方式

    传统的web项目,只需要在web.xml里配置多个即可,并且支持多个url-pattern 在spring boot中,我们默认无需配置,系统会自动装配一个,感兴趣的可以看下源码 org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration 里面有个 DispatcherServletRegistrationBean,关键是这里只能指定一个path,如下的源码截图 如果想要指定多个,我们

  • 基于spring boot 的配置参考大全(推荐)

    如下所示: # =================================================================== # COMMON SPRING BOOT PROPERTIES # # This sample file is provided as a guideline. Do NOT copy it in its # entirety to your own application. ^^^ # =============================

  • 详解Spring Boot 属性配置和使用

    spring Boot 允许通过外部配置让你在不同的环境使用同一应用程序的代码,简单说就是可以通过配置文件来注入属性或者修改默认的配置. Spring Boot 支持多种外部配置方式 这些方式优先级如下: 命令行参数 来自java:comp/env的JNDI属性 Java系统属性(System.getProperties()) 操作系统环境变量 RandomValuePropertySource配置的random.*属性值 jar包外部的application-{profile}.propert

  • spring boot 日志配置详解

    最近在学习spring boot框架的路上,今日看了一下spring boot日志配置,顺便留个笔记记录一下. 1.新建logback.xml文件 内容如下: <!-- Logback configuration. See http://logback.qos.ch/manual/index.html --> <configuration scan="true" scanPeriod="10 seconds"> <include res

  • Spring boot多线程配置方法

    本文实例为大家分享了Spring boot多线程配置的具体代码,供大家参考,具体内容如下 1.配置线程配置类 package test; import java.util.concurrent.Executor; import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler; import org.springframework.context.annotation.ComponentScan; import o

  • 浅谈Spring Boot 属性配置和自定义属性配置

    在使用spring boot过程中,可以发现项目中只需要极少的配置就能完成相应的功能,这归功于spring boot中的模块化配置,在pom.xml中依赖的每个Starter都有默认配置,而这些默认配置足以满足正常的功能开发. 如果需要修改自定义修改默认配置,spring boot 提供了很简便的方法,只需要在application.properties 中添加修改相应的配置.(spring boot启动的时候会读取application.properties这份默认配置) 一.修改默认配置 例

  • Spring Boot Security配置教程

    1.简介 在本文中,我们将了解Spring Boot对spring Security的支持. 简而言之,我们将专注于默认Security配置以及如何在需要时禁用或自定义它. 2.默认Security设置 为了增加Spring Boot应用程序的安全性,我们需要添加安全启动器依赖项: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-

  • Spring Boot自定义配置实现IDE自动提示功能

    一.背景 官方提供的spring boot starter的配置项,我们用IDE配置的时候一般都有自动提示的,如下图所示 而我们自己自定义的配置却没有,对开发非常不友好容易打错配置, 那这个是怎样实现的呢? 二.提示原理 IDE是通过读取配置信息的元数据而实现自动提示的,而元数据在目录 META-INF 中的 spring-configuration-metadata.json 或者 additional-spring-configuration-metadata.json 三.实现自动提示 以

  • Spring Boot 自动配置的实现

    Spring Boot 自动配置 来看下 spring boot中自动配置的注解 @SuppressWarnings("deprecation") @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @AutoConfigurationPackage @Import(EnableAutoConfigurationImportSelector.class) public

随机推荐