嵌入式与非嵌入式 Java 服务器
我正在开发一个Java项目,并且一直在使用Tomcat服务器进行本地测试。然而,我即将推到Heroku,我发现了一篇文章,建议使用“嵌入式”雄猫。
我环顾四周,看看在Java服务器的上下文中“嵌入式”到底是什么意思,但似乎Google上的每个人都已经理解了“嵌入式”的含义。我没有。部署“常规”Tomcat服务器和“嵌入式”服务器有什么区别?
我正在开发一个Java项目,并且一直在使用Tomcat服务器进行本地测试。然而,我即将推到Heroku,我发现了一篇文章,建议使用“嵌入式”雄猫。
我环顾四周,看看在Java服务器的上下文中“嵌入式”到底是什么意思,但似乎Google上的每个人都已经理解了“嵌入式”的含义。我没有。部署“常规”Tomcat服务器和“嵌入式”服务器有什么区别?
“嵌入式”意味着您的程序随服务器一起提供,而不是将Web应用程序部署到外部服务器。
使用嵌入式服务器,您的应用程序与所选服务器打包在一起,并负责服务器启动和管理。
从用户的角度来看,区别在于:
war
嵌入服务器对于测试目的非常有用,您可以在测试期间随意启动或停止服务器。
传统上,要托管 Java Web 应用程序,您需要在服务器上安装一个 Tomcat 实例,然后将所有 WAR 文件推送到该服务器上。也许你把几个Tomcat实例聚集成在一起,但想法是一样的。有一个Tomcat服务器,你所有的Java Web应用程序都部署到它上面。
传统与嵌入式雄猫
在微服务领域,情况略有不同。我们不是一个Tomcat服务器托管许多Web应用程序,而是使用微服务,采用一个Web应用程序,将该Web应用程序部署到一个tomcat服务器,然后将其全部压缩到一个zip,jar或war文件中,该文件可通过Java命令执行。因此,现在我们有一个可执行文件,其中包含运行Web应用程序所需的所有内容,包括Tomcat服务器。
基于容器的配送
某些产品在嵌入式 servlet 引擎中提供其整个产品。你可以在一个可执行的WAR文件中得到Jenkins,尽管我相信它们嵌入了Jetty,而不是Tomcat,但这是同样的想法。但是,与分发jar/war相比,人们所做的不太可能是将整个事情打包在一个docker容器中,并将其全部部署到Kubernetes或Heruku或其他任何东西中。
这就是嵌入式tomcat服务器背后的想法。
Maven and Embedded Tomcat
创建嵌入式tomcat服务器的最简单方法之一是使用Apache Maven。下面是一个 Maven 构建示例,它不仅构建了一个 Web 应用程序,还下载了 tomcat 并将整个内容打包到可执行 JAR 中: