springBoot的web环境中默认使用Tomcat作为内置服务器,其实springBoot提供了4种内置的额服务器供我们选择:
- tomcat
- jetty
- netty
- undertow
添加web服务器
打开我们的项目,运行一下,可以发现控制台没有任何服务器的,因为我们并没有导入他们
我们在pom.xml中导入一下web服务器坐标
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
然后再来看一下控制台的输出:
可以看到有一句话是说tomcat服务器运行了8080端口号,这就说明我们导入web服务器成功了
那么如何切换web服务器呢?如果我不想用Tomcat呢?
切换web服务器
首先我们打开springBoot的源码分析一下
打开 Maven: org.springframework.boot:spring-boot-autoconfigure:2.6.2
的jar包,找到web文件夹-->embedded文件夹, 这个文件夹的意思嵌入的意思,可以看到这个文件里有我们刚才说的四种服务器,然后我们打开第一个类 EmbeddedWebServerFactoryCustomizerAutoConfiguration
,
可以看到这个类中有我们上节说的注解,用来判断这个Bean什么时候加载。这四个服务器的类中都有一个注解 ConditionalOnClass
,条件是 Tomcat的类或者jetty的类等等, 也就是说如果有这个类才加载这个Bean,如果没有这个类就不加载这个Bean,所以我们就有办法了,只要把Tomcat的类去掉,换上别的服务器的类不就行了?
那么,如果去掉Tomcat的类呢?
只需要在pom.xml中把这Tomcat排除在外就行了,修改web服务器的坐标,引入jetty的坐标,代码如下:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
重新运行一下项目,可以看到jetty服务器运行起来了