【问题标题】:Embedded vs Non-Embedded Java Server嵌入式与非嵌入式 Java 服务器
【发布时间】:2014-06-04 07:07:45
【问题描述】:
我正在处理一个 Java 项目,并且一直在使用 Tomcat 服务器进行本地测试。然而,我即将推到 Heroku,我发现 an article 建议使用“嵌入式”Tomcat。
我环顾四周,了解 Java 服务器上下文中“嵌入”的确切含义,但似乎 Google 上的每个人都已经了解“嵌入”的含义。我不。部署“常规”Tomcat 服务器和“嵌入式”服务器有什么区别?
【问题讨论】:
标签:
java
tomcat
heroku
webserver
【解决方案1】:
“嵌入式”意味着您的程序附带服务器,而不是将 Web 应用程序部署到外部服务器。
使用嵌入式服务器,您的应用程序与选择的服务器打包在一起,并负责服务器启动和管理。
从用户的角度来看,区别在于:
- 带有嵌入式服务器的应用程序看起来像一个普通的 java 程序。您只需启动它即可。
- 常规 Web 应用程序通常是一个
war 存档,需要部署到某个服务器上
嵌入服务器对于测试目的非常有用,您可以在测试期间随意启动或停止服务器。
【解决方案2】:
传统上,要托管 Java Web 应用程序,您需要在服务器上安装一个 Tomcat 实例,然后将所有 WAR 文件推送到该服务器上。也许您将几个 Tomcat 实例集群在一起,但想法是一样的。有一个 Tomcat 服务器,所有的 Java Web 应用程序都部署在它上面。
传统与嵌入式 Tomcat
在微服务领域,情况有些不同。通过微服务,我们不是在一台 Tomcat 服务器上托管许多 Web 应用程序,而是采用一个 Web 应用程序,将该 Web 应用程序部署到一个 Tomcat 服务器,然后将其全部压缩到一个 zip、jar 或 war 文件中,该文件可以通过Java 命令。所以现在我们有了一个可执行文件,其中包含运行 Web 应用程序所需的一切,包括 Tomcat 服务器。
基于容器的分发
某些产品通过embedded servlet engine 运送整个产品。您可以在单个可执行 WAR 文件中获得Jenkins,尽管我相信他们嵌入了 Jetty,而不是 Tomcat,但这是相同的想法。但与分发 jar/war 相比,人们所做的是将整个东西打包到一个 docker 容器中,然后将其全部部署到 Kubernetes 或 Heruku 或其他任何东西上。
这就是 embedded tomcat server 背后的想法。
Maven 和嵌入式 Tomcat
创建嵌入式 tomcat 服务器的最简单方法之一是使用Apache Maven。下面是一个 Maven 构建示例,它不仅构建了一个 Web 应用程序,还下载了 tomcat 并将整个内容打包到一个可执行的 JAR 中:
【解决方案3】:
来自here,这是您将tomcat“嵌入”到您的应用程序的时候。也就是说,你负责启动和停止tomcat。这与正常的容器操作相反,但您可能会发现它对快速部署和测试很有用。