嵌入式与非嵌入式Java服务器

Jac*_*son 12 java webserver tomcat heroku

我正在开发一个Java项目,并且一直在使用Tomcat服务器进行本地测试.然而,我即将推向Heroku,我发现了一篇建议使用"嵌入式"Tomcat的文章.

我环顾四周看看Java服务器环境中究竟"嵌入"的含义,但似乎Google上的每个人都已经了解"嵌入式"的含义.我不.部署"常规"Tomcat服务器和"嵌入式"服务器有什么区别?

dim*_*niy 13

"嵌入式"意味着您在其中编程服务器而不是部署到外部服务器的Web应用程序.

使用嵌入式服务器,您的应用程序与选择的服务器打包在一起,负责服务器的启动和管理.

从用户的角度来看,区别在于:

  • 嵌入式服务器的应用程序看起来像普通的java程序.你刚刚启动它就是这样.
  • 常规Web应用程序通常是war需要部署到某个服务器的存档

嵌入服务器对于测试目的非常有用,您可以在测试期间随意启动或停止服务器.

  • 内嵌的 tomcat 中反映的 tomcat 版本是否与实际的 tomcat 相同?即假设可在 Apache 站点上下载的 tomcat 是 8.5 版并且嵌入了 tomcat(如此链接所示:https://mvnrepository.com/artifact/org.apache.tomcat.embed/tomcat-embed-core/ 8.5.5) 相同还是不同? (2认同)

Cam*_*zie 7

传统上,要托管 Java Web 应用程序,您需要在服务器上安装一个 Tomcat 实例,并将所有 WAR 文件推送到该服务器上。也许您将几个 Tomcat 实例聚集在一起,但想法是一样的。有一个 Tomcat 服务器,您的所有 Java Web 应用程序都部署到其中。

传统与嵌入式 Tomcat

在微服务的世界里,情况有点不同。与使用微服务的一台 Tomcat 服务器托管许多 Web 应用程序不同,我们采用一个 Web 应用程序,将该 Web 应用程序部署到一台 tomcat 服务器,然后将其全部压缩到一个 zip、jar 或 war 文件中,该文件可以通过Java 命令。所以现在我们有一个可执行文件,其中包含运行 Web 应用程序所需的一切,包括 Tomcat 服务器。

基于容器的分发

某些产品在嵌入式 servlet 引擎中提供其整个产品。您可以在单个可执行 WAR 文件中获取Jenkins,尽管我相信它们嵌入了 Jetty,而不是 Tomcat,但这是相同的想法。但与分发 jar/war 相比,人们所做的不太可能将整个事情打包在一个 docker 容器中,然后将其全部部署到 Kubernetes 或 Heruku 或其他任何地方。

这就是嵌入式 tomcat 服务器背后的想法。

Maven 和嵌入式 Tomcat

创建嵌入式 tomcat 服务器的最简单方法之一是使用Apache Maven。下面是一个 Maven 构建示例,它不仅构建了一个 Web 应用程序,而且还下载了 tomcat 并将整个内容打包在一个可执行的 JAR 中:

使用 Maven 嵌入 Tomcat