Java Web应用程序部署:是否要解压缩?

17
非常简单的问题。我有一个40MB左右的.war文件需要在JBoss上运行。 部署的最佳实践是什么:应该以展开的格式部署war文件吗?还是不用呢?
我之所以问这个问题,是因为如果它被展开了,那么我就可以选择随时更新我的属性文件(每次更改属性文件时都不需要制作新的war)。
但我不确定以展开的格式部署war是否是最佳实践。
请帮我理解。 :)

还有,谁决定把它称为“exploded”而不是只是“extracted”?当然这样更有趣,但我们中的所有人都应该称事物为它本来的名字:)。 - bbarker
4个回答

15
战争文件应该以爆炸格式部署吗?或者不应该?
这取决于几个因素:
- 您是否要求应用程序服务器管理员在部署后修改WAR文件的内容?如果答案是肯定的,特别是涉及属性或配置文件的情况下,则应该使用爆炸格式。这将使更改文件变得更加容易,而无需重新部署完整的WAR文件。 - 您如何传播生产环境中的更改?如果您没有预编译JSP文件,并且打算通过将它们复制到包含爆炸的WAR文件区域来部署更新版本的JSP,则很明显,重新部署巨大的WAR文件不是最佳解决方案。然而,请注意,这将取决于您的部署实践。通常,更容易审计在生产中的WAR文件是版本控制生成的构建副本,其中包含WAR文件的单个哈希值。如果您部署增量更改,则会发现需要为每个部署的文件提供哈希值。 - 您希望多快部署并使应用程序可用?这一点虽然微不足道,但有足够的实例表明,由于应用程序服务器正在忙于爆炸WAR文件并重新创建必要的工件,所以某些应用程序需要花费数分钟才能启动。如果服务器的行为是在每次应用程序服务器重启时爆炸WAR文件,这可能会导致显着的停机时间。由于我不知道JBoss或特定版本的行为,因此建议您自己验证,以确保可以将停机时间限制在可接受的水平。

那很详细。谢谢Vineet。 - pavanlimo

9
修改已经解压的内容确实更快、更高效,但需要考虑审计和可追溯性。只部署WAR文件并将其视为“封闭”的一个优点是,您所做的任何更改都必须在源代码管理系统中捕获。毫无疑问,您不希望人们能够在没有某种审计跟踪的情况下更改应用程序配置中的任何内容。
Java EE的关注点分离通常意味着WAR的开发人员与应用服务器的管理员不是同一人。如果开发人员没有直接访问权限,那么那些不太了解应用程序的人正在进行更改。
我并不是在为禁止开发人员修改解压的WAR的极端态度辩护,只是提供另一种观点供您考虑。

谢谢@duffymo。我会考虑的。然而,根据我的要求,到目前为止,平衡倾向于使用explode。 - pavanlimo
几年后,我认为这是这个问题更合适的答案。答案是:除非你真的非常需要,否则不要爆炸。 - pavanlimo

2

如果您需要在不重新部署的情况下更改.war文件中的配置,则建议使用Exploded部署。否则,建议直接部署文件(然后jboss将把文件提取到tmp/deploy/..目录中)。


1
但是在生产环境中以展开的格式部署是否“可行”? - pavanlimo
2
是的,当然。许多其他出版商也这样做(例如:TeamCity,Hyperic HQ,...)。 - powerMicha
谢谢@powerMicha提供的信息。不知道你是否了解有关Java Web应用程序部署最佳实践的文档/文章? - pavanlimo

0

无论如何它都会被解压,所以即使部署为war文件,您也可以更改属性...至少在开发环境中没有区别。

然而,如果您在生产环境中以解压的格式部署,以便可以更改属性文件,那么更大的问题不是您需要在部署后更改(生产)属性吗?而不是您是否使用了war文件。


我无法清楚地理解您的意思,但是如果您重新启动服务器,则更改的属性文件将被替换为原始属性文件,因为取消警告发生在临时位置。 - pavanlimo
@pavanlimo 我知道,在开发过程中我们更改了临时位置的文件。我不确定你是在开发环境还是生产环境中这样做。我的观点是,如果你正在生产环境中更改属性,那么你应该考虑一下为什么要这样做(如果你确实这样做了)。如果你在谈论开发环境,那么我认为这并不重要,但我更喜欢 wars。 - NimChimpsky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接