博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring Boot 揭秘与实战(五) 服务器篇 - 内嵌的服务器 Tomcat剖析 | 掘金技术征文...
阅读量:6939 次
发布时间:2019-06-27

本文共 4963 字,大约阅读时间需要 16 分钟。

Spring Boot 默认使用的是 Tomcat 作为内嵌的服务器。所以,我们搭建一个 Web 工程将会变得非常的简单。

内嵌的 Tomcat,一个Jar包运行

还记得,《》讲到的例子么?我们来回顾下。

首先,修改 POM 文件,添加依赖。

org.springframework.boot
spring-boot-starter-web
复制代码

创建Java代码

@RestController@EnableAutoConfigurationpublic class RestfulApiWebDemo {    @RequestMapping("/")    String home() {        return "Hello World!";    }    public static void main(String[] args) throws Exception {        SpringApplication.run(RestfulApiWebDemo.class, args);    }}复制代码

直接运行 Java 类,或者可以通过 “mvn spring-boot:run” 在命令行启动该应用。会启动一个内嵌的 Tomcat 服务器运行在 8080 端口。访问 “ 可以看到页面上显示“Hello World!”。

此外,在 POM 文件添加插件。

org.springframework.boot
spring-boot-maven-plugin
复制代码

在添加了插件后,当运行 “mvn package” 进行打包时,会打包成一个可以直接运行的 JAR 文件,使用 “java -jar” 命令就可以直接运行。

通过 Spring Boot 内嵌的 Tomcat 服务器,我们通过一个 jar 包就可以运行一个 web 工程,这个也很符合微服务的场景,我们在正式环境只要部署一个 jar 即可,当然,我们还可以把这个 jar 部署在 docker 容器中运行,是不是非常方便呢?

如何定制内嵌 Tomcat

设置内嵌Tomcat的端口

Spring Boot 内嵌的 Tomcat 服务器默认运行在 8080 端口。如果,我们需要修改Tomcat的端口,我们可以在 src/main/resources/application.properties 中配置Tomcat信息。

server.port=8089复制代码

现在,你可以重新运行上面的例子,看下是不是 Tomcat 的端口变成 8089 了。

设置内嵌Tomcat的最大线程数

我们还可以修改内嵌的 Tomcat 服务器的最大线程数。

server.tomcat.max-threads=1000复制代码

设置内嵌Tomcat的编码

在一些场景下,我们可能需要改动 Tomcat 的编码,例如是 GBK 还是 UTF-8。

server.tomcat.uri-encoding = UTF-8复制代码

官方提供的常用配置参数

除了上面讲到的3个场景外,我们还可以自定义设置路径地址、 SSL等参数。

这里列举一些官方提供的常用配置参数,如果有特定需求,可以进行内嵌 Tomcat 的定制。

server.tomcat.accesslog.enabled=false # Enable access log.server.tomcat.accesslog.pattern=common # Format pattern for access logs.server.tomcat.accesslog.prefix=access_log # Log file name prefix.server.tomcat.accesslog.rename-on-rotate=false # Defer inclusion of the date stamp in the file name until rotate time.server.tomcat.accesslog.suffix=.log # Log file name suffix.server.tomcat.background-processor-delay=30 # Delay in seconds between the invocation of backgroundProcess methods.server.tomcat.basedir= # Tomcat base directory. If not specified a temporary directory will be used.server.tomcat.internal-proxies=10\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}|\\        192\\.168\\.\\d{1,3}\\.\\d{1,3}|\\        169\\.254\\.\\d{1,3}\\.\\d{1,3}|\\        127\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}|\\        172\\.1[6-9]{1}\\.\\d{1,3}\\.\\d{1,3}|\\        172\\.2[0-9]{1}\\.\\d{1,3}\\.\\d{1,3}|\\        172\\.3[0-1]{1}\\.\\d{1,3}\\.\\d{1,3} # regular expression matching trusted IP addresses.server.tomcat.max-threads=0 # Maximum amount of worker threads.server.tomcat.min-spare-threads=0 # Minimum amount of worker threads.server.tomcat.port-header=X-Forwarded-Port # Name of the HTTP header used to override the original port value.server.tomcat.protocol-header= # Header that holds the incoming protocol, usually named "X-Forwarded-Proto".server.tomcat.protocol-header-https-value=https # Value of the protocol header that indicates that the incoming request uses SSL.server.tomcat.redirect-context-root= # Whether requests to the context root should be redirected by appending a / to the path.server.tomcat.remote-ip-header= # Name of the http header from which the remote ip is extracted. For instance `X-FORWARDED-FOR`server.tomcat.uri-encoding=UTF-8 # Character encoding to use to decode the URI.复制代码

War 包部署的使用细节

如果,我们还是希望通过 war 包的方式,部署到外部的 Tomcat 服务器上, Spring Boot 也是支持的,不过需要一些额外的配置。

首先,要将最终的打包形式改为 war 包,所以需要将 packaging 的值修改为 war。

war
复制代码

接着,对依赖进行适当的配置,值得注意的是,在这里需要移除对嵌入的 Tomcat 的依赖,这样打出的 WAR 包中,在 lib 目录下才不会包含 Tomcat 相关的JAR包。

org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-tomcat
org.springframework.boot
spring-boot-starter-tomcat
provided
复制代码

另外,为了保证编译正确,还需要添加对 servlet-api 的依赖,因此添加如下的配置。

org.apache.tomcat
tomcat-servlet-api
7.0.42
provided
复制代码

设置,打包后的项目访问名称,在节点里添加内容。

springboot-web-demo
复制代码

如果我们想要将在外部的 Tomcat 服务器部署的 WAR 包,就不能依赖于 RestfulApiWebDemo 的 main 函数,要以类似于 web.xml 文件配置的方式来启动 Spring 应用上下文,此时我们需要声明一个类,这个类的作用与在 web.xml 中配置负责初始化 Spring 应用上下文的监听器作用类似,只不过在这里不需要编写额外的 XML 文件了。

public class ServletInitializer extends SpringBootServletInitializer {       @Override      protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {          return application.sources(RestfulApiWebDemo.class);      }  }复制代码

大功告成,此时,我们可以通过 Maven 的 “mvn clean package” 打包出一个 war 包,并部署到外部的 Tomcat 服务器运行。访问 “ 可以看到页面上显示“Hello World!”。

总结

Spring Boot 默认使用的是 Tomcat 作为内嵌的服务器。所以,我们搭建一个 Web 工程将会变得非常的简单,只需要一个 jar 包即可运行。此外,我们还可以对内嵌的 Tomcat 进行一些定制,例如端口、最大线程数、编码、 SSL 等。如果,我们还是希望通过 war 包的方式,部署到外部的 Tomcat 服务器上, Spring Boot 也是支持的,不过需要一些额外的配置,这个配置过程也只需要几个简单的步骤即可实现。

源代码

相关示例完整代码:

掘金技术征文

掘金技术征文活动链接:

(完)

更多精彩文章,尽在「服务端思维」微信公众号!

转载地址:http://lrinl.baihongyu.com/

你可能感兴趣的文章
基础概要
查看>>
转-架构高性能网站秘笈(三)——浏览器缓存
查看>>
[SDOI2009][BZOJ 1876]SuperGCD
查看>>
TweenMax动画库学习(六)
查看>>
VueConf 全球首届Vue.js开发者大会资料整理
查看>>
多态 向上,向下转型
查看>>
Linux进程间通信——使用信号量
查看>>
C语言中带有返回类型的函数没有return语句的影响
查看>>
学习笔记之XML
查看>>
高性能js之js文件的加载与解析
查看>>
扭转二次大战战局的关键:雷达英雄传奇
查看>>
类的封装性和信息隐蔽[转 非原创]
查看>>
程序员所具备的素质[转]
查看>>
MySQL-Front 出现“程序注册时间到期 程序将被限制模式下运行”解决方式
查看>>
Address already in use的解决方法
查看>>
微信接口
查看>>
保持系统时间与NTP网络时间服务器同步的重要性
查看>>
c/c++基本数据类型转换
查看>>
Python中Json解析的坑
查看>>
程序员、架构师、技术经理、技术总监和CTO有啥区别?
查看>>