SpringBoot简介
SpringBoot基于Spring4.0设计,不仅继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化了Spring应用的整个搭建和开发过程。另外SpringBoot通过集成大量的框架使得依赖包的版本冲突,以及引用的不稳定性等问题得到了很好的解决。
SpringBoot所具备的特征有:
(1)可以创建独立的Spring应用程序,并且基于其Maven或Gradle插件,可以创建可执行的JARs和WARs;
(2)内嵌Tomcat或Jetty等Servlet容器;
(3)提供自动配置的“starter”项目对象模型(POMS)以简化Maven配置;
(4)尽可能自动配置Spring容器;
(5)提供准备好的特性,如指标、健康检查和外部化配置;
(6)绝对没有代码生成,不需要XML配置。
性能比较
既然SpringBoot内嵌Jetty容器,那我们可不可以直接切换到Jetty呢,答案是可以的。
单纯比较Tomcat与Jetty的性能意义不是很大,只能说在某种使用场景下他们表现得各有差异,因为他们面向的使用场景不尽相同。从架构上来看Tomcat在处理少数非常繁忙的连接上更有优势,也就是说连接生命周期如果短,Tomcat的总体性能更高。
而Jetty刚好相反,Jetty可以同时处理大量连接而且可以长时间博爱吃这些连接。例如,一些Web聊天应用非常适合用Jetty做服务器。淘宝的Web旺旺就用Jetty作为Servlet引擎。
由于Jetty的架构非常简单,作为服务器他可以按需加载组件,这样,不需要的组件就可以去掉,无形中可以减少服务器本身的内存开销,处理一次请求也可以减少产生的临时对象,这样性能也会提高。另外Jetty默认使用的是NIO技术,在处理I/O请求上更占优势,Tomcat默认使用的是BIO,在处理静态资源时,Tomcat的性能较差。
切换方法
在Maven中,在我们添加的spring-boot-starter-web包中添加exclusion,将Tomcat依赖排除,再添加我们需要的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的这句话时,代表我们已经切换到Jetty容器