在我的理论中,spring boot能够独立运行java web应用程序。它说它有一个自己的嵌入式servlet容器,可以使用JNDI本身。
我之前构建了一个war文件(spring-mvc,security,gradle built),但是Spring启动汇编jar文件,它可以在任何有JVM的机器上运行。
所以我的问题是,如果我制作了一个基于Spring boot的Web应用程序(包含JSP文件和JNDI用于查找数据源),虽然它有自己的嵌入式servlet容器和打包的jar文件,可以独立运行,我还需要将其打包为WAR文件并将其部署在WAS(Websphere Application Server)或servlet容器中,原因是性能,稳定性,横向扩展等?
答案 0 :(得分:2)
WAS是一个完整的Java企业应用服务器,另一方面,你有Spring只需要一个Servlet容器(Servlet是完整JEE的一部分)。
Servlet容器例如是:Tomcat,Jetty,还有WAS。
Spring Boot能够将完整的应用程序与Tomcat的代码一起打包在一个JAR中,这样这个jar就包含了Servlet容器和你的应用程序。
我是否需要额外的WAS来提高性能,稳定性,扩展性等?
WAS优于Tomcat的主要特点是: - WAS支持EJB和CDI(Tomcat需要TomEE),但Spring不会使用它,因为它是一个Dependency Injection容器 - WAS有更多的监控功能,但这没关系,因为Spring Boot有Actuator
@See Difference between an application server and a servlet container?了解更多详情
答案 1 :(得分:0)
简单的答案是否定。您提到的任何原因(性能,稳定性,横向扩展)都不需要任何完整的应用程序服务器。你可以用tomcat做得很好
看起来您只使用应用程序服务器中的JNDI功能。当您将servlet容器与应用程序一起打包时,您真的需要JNDI吗?我不这么认为。那些日子早已过去。
当你必须在两者之间移动应用程序时,JNDI真的很棒 环境:开发到集成以测试到生产。如果你 配置每个应用服务器使用相同的JNDI名称,您可以拥有 每个环境中的不同数据库,而不必更改您的 码。您只需选择WAR文件并将其放入新文件中即可 环境。https://stackoverflow.com/a/7760768/6785908
(如果您仍需要使用JNDI来查找数据源,请参阅:https://stackoverflow.com/a/24944671/6785908)。
不,我还没有真正看到将您的应用程序打包为WAR并将其部署到传统应用程序服务器的原因。话虽这么说,如果你有一些现有的基础设施,你被迫部署到现有的WAS(或WebLogic或JBoss任何应用服务器)服务器,那么我休息我的情况:)。