环境:JDK1.8、MAVEN 3.6.1、eclipse
1.配置tomcat的容器
由于当前的SpringBoot默认使用的Tomcat容器,所以不需要添加pom配置,查看官方文档:
org.springframework.boot.autoconfigure.web.ServerProperties
中存在servlet的配置了Tomcat的所有配置信息
1.1 创建Tomcat配置类(方式一)
当前的
TomcatConfig
类
/**
* @description 通过创建TomcatEmbeddedServletContainerFactory对象来实现当前的tomcat管理
* @author hy
* @date 2019-08-16
*/
@Configuration
public class TomcatConfig {
//EmbeddedServletContainerFactory 查看当前的EmbeddedServletContainerFactory发现具有
//tomcat、jetty、Undertow这几个的实现类,这里默认为tomcat
@Bean
public EmbeddedServletContainerFactory getEmbeddedServletContainerFactory() {
TomcatEmbeddedServletContainerFactory tomcat=new TomcatEmbeddedServletContainerFactory("/springboot-tomcat", 8080);//设置当前的tomcat访问端口和地址
tomcat.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/404.html"));
return tomcat;
}
}
1.2 创建入口类并测试
当前的
Application
类中的内容:
/**
* @description 配置SpringBoot中的servlet容器
* @author hy
* @date 2019-08-16
*/
@RestController
@SpringBootApplication
public class Application
{
@RequestMapping("/hi")
public String hi() {
return "【自定义server类!】";
}
public static void main( String[] args )
{
SpringApplication.run(Application.class, args);
}
}
1.3 测试(方式一)
成功!
1.4 实现EmbeddedServletContainerCustomizer启动Tomcat容器(方式二)
当前的
MyTomcatServletContainer
类的内容如下:
/**
* @description 1.通过实现EmbeddedServletContainerCustomizer来进行代码的配置server
* @author hy
* @date 2019-08-16
*/
@Component
public class MyTomcatServletContainer implements EmbeddedServletContainerCustomizer {
public void customize(ConfigurableEmbeddedServletContainer container) {
container.setPort(8888);// 设置端口
container.setContextPath("/springboot-tomcat");// 设置访问路径
//Root ContextPath must be specified using an empty string,当前的contextpath不能设置为/
container.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/404.html"));
}
}
1.5 测试(方式二)
成功!
2.使用Jetty容器启动
2.1 添加pom依赖
当前的
pom
文件:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.2.4.RELEASE</version>
<relativePath />
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 配置jetty服务器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
2.2 启动jetty
EmbeddedServletContainerFactory 查看当前的EmbeddedServletContainerFactory发现具有
tomcat、jetty、Undertow这几个的实现类,这里默认为tomcat
方式一:还是直接使用MyTomcatServletContainer
一样可以启动,显示当前的jetty启动了
方式二:修改TomcatConfig
中的 getEmbeddedServletContainerFactory方法,返回为JettyEmbeddedServletContainerFactory
这个实现类,测试都可以实现
3. 总结
1.使用SpringBoot的时候跟换容器的时候需要导入对应的依赖
2.使用SpringBoot中跟换容器有两种方式:
- 1.直接
实现EmbeddedServletContainerCustomizer
,当前的内容可以改变启动容器,当前容器改变的时候不需要修改,也可以启动 - 2.创建
EmbeddedServletContainerFactory
相对应的实现类,缺点:当容器修改的时候,需要修改不同的实现类。
以上纯属个人见解,如有问题请联系本人!