什么是嵌入式Tomcat? -来自WhatIs.com的定义


嵌入式Tomcat服务器由单个Java Web应用程序和完整的Tomcat服务器发行版组成,打包在一起并压缩成单个JAR,WAR或ZIP文件。
嵌入式Tomcat提供了一种打包Java Web应用程序的方法,该方法与基于微服务的软件开发方法一致。它还使通过Docker容器分发Java Web应用程序和通过容器编排服务(例如Kubernetes或OpenShift)管理它们变得更加容易。

嵌入式Tomcat与独立实例
在传统设置中,企业将使用单个独立的Tomcat服务器,并将所有Java Web应用程序部署到该实例。然后,该一台应用服务器将在水平和垂直方向上进行集群和扩展,以管理吞吐量和容量。使用这种传统配置,Tomcat服务器与部署到该服务器的应用程序之间的基数始终是一对多。
对于嵌入式Tomcat服务器,服务器与应用程序之间的比率为1比1。单个Java Web应用程序已部署到单个Tomcat服务器。与Tomcat服务器和已部署的应用程序相关联的所有文件都被压缩为单个存档文件,通常以.zip,.jar或.war扩展名。
术语嵌入式Tomcat的基础是指应用程序和整个Tomcat服务器打包在一个易于管理和压缩的单个存档文件中。

嵌入式Tomcat如何工作?
嵌入式Tomcat服务器的另一个关键元素是可执行文件。只要计算机上已安装JRE并配置了JAVA_HOME,在将JAR文件的名称提供给java -jar实用程序时,就可以从命令行运行嵌入式Tomcat服务器。这是运行打包在名为embeded-tomcat-example.jar文件的嵌入式Tomcat应用程序所需的命令:

java -jar embedded-tomcat-example.jar

命令完成后,Tomcat服务器将启动,并且可以通过HTTP请求(例如网页,基于SOAP的Web服务或RESTful API调用)访问部署在其中的Java Web应用程序。默认的嵌入式Tomcat端口是8080。

嵌入式Tomcat和Maven
创建嵌入式Tomcat文件的最常见方法之一是使用Maven -Tomcat插件进行构建。
通过这种方法,开发人员可以创建基于Maven的Java Web项目,而无需考虑应用程序的打包方式。然后,在Maven构建期间,将引用Tomcat插件的exec-war-only开关。这是一个如何使用Maven-Tomcat插件创建可执行的嵌入式Tomcat JAR文件的示例。

/c/ embedded Tomcat example/maven-build
$ mvn clean install tomcat7:exec-war-only
[INFO] --- embedded tomcat maven plugin running
[INFO] -------------------------------------------
[INFO] MAVEN BUILD SUCCESS : EMBEDDED TOMCAT JAR CREATED
[INFO] -------------------------------------------
[INFO] Elapsed time: 2.211 s
[INFO] -------------------------------------------

嵌入式Tomcat和Spring Boot
Spring Boot是一个流行的基于Java的框架,用于开发微服务。默认情况下,用于构建Spring Boot应用程序的Spring Tool Suite(STS)IDE会在每次构建或部署时自动使用开发的微服务来创建嵌入式Tomcat服务器。STS内置了其他功能,以促进基于微服务的开发,包括设置断点以及随后在嵌入式Tomcat服务器上执行代码时逐步执行代码的功能。

嵌入式Tomcat替代品
Tomcat与其他Java应用程序服务器(包括WebSphere,Jetty,Wildfly,Payara和JBoss)竞争。这些服务器中的每一个都提供了用于创建单个JAR或WAR文件的功能,在该文件中嵌入了服务器和应用程序。
从WebSphere Portal实例转向微服务体系结构的IBM客户端可以遵循带有嵌入式WebSphere Liberty实例的通用迁移路径。Jetty是Jenkins CI的独立发行版中使用的嵌入式服务器。Wildfly是高度模块化的,可以去除所有不需要的服务。当您希望服务器占用的空间最小时,它通常是嵌入式Tomcat实例的流行替代方法。

嵌入式Tomcat与单独运行的性能
由于每个嵌入式Tomcat实例都运行自己的完整Tomcat服务器实例,因此与独立版本相比,前期性能成本较高。
例如,如果组织运行了10个嵌入式Tomcat实例,则将启动10个单独的Tomcat服务器实例。但是,独立实例仅将10个应用程序部署到一个实例。在这种情况下,独立性能将更快,因为仅需启动一个Java进程即可。所有传入的请求都可以由高效线程处理。
使用嵌入式Tomcat,每个服务器都需要自己的Java进程,并且其他线程可以处理传入的请求。Java进程比单个执行线程需要更多的处理能力。因此,与承载多个应用程序的独立服务器相比,嵌入式Tomcat服务器需要更多资源才能运行。

嵌入式Tomcat的好处
前面提到的将嵌入式Tomcat性能与独立实例进行比较的场景,错过了开发人员将应用程序部署到嵌入式Tomcat实例的原因。使用嵌入式Tomcat实例,可以使单个应用程序脱机或重新启动,而不会影响其他应用程序。使用独立架构是不可能的。
此外,如果单个应用程序需要更多资源,则可以对其进行工作负载管理。在传统的实现方式中,必须对单个Tomcat服务器进行工作负载管理,这意味着即使仅部署的一个应用程序承受了较高的负载,每个托管应用程序都需要进行扩展。

嵌入式Tomcat和容器
在可执行的嵌入式Tomcat实例中交付Java Web应用程序的主要思想是能够将该文件移动到Docker容器中,并将该容器部署到容器托管的环境(如Kubernetes或OpenShift)中。此功能打开了各种低成本的基于云的伸缩选项,这些选项对于独立的Tomcat实例不可用。
因此,使用嵌入式Tomcat服务器是允许传统开发的Java Web应用程序利用现代企业架构的关键。