单独的战争档案的利弊

时间:2012-09-24 18:54:26

标签: java-ee war

我对Java环境有些新意,对构建Web门户的最佳实践有一些疑问。所以我的问题是将巨大的战争文件分解成较小的战争档案是否有任何好处。我能想出的唯一一个:

  • 模块化:它允许不同的开发人员在您网站的不同部分上工作并单独部署它们。

  • 组织:如果您的网站不在同一代码库中,则可以更轻松地找到它们的部分内容。

  • 可伸缩性:如果您要在不同的Web服务器上部署站点的某些部分,这对我来说才有意义。如果将它们全部部署到相同的前端服务器上有什么优势吗?

从我所看到的,似乎大多数人似乎认为一个大战争档案是最好的方法:避免冗余,一步部署等等。那么有理由将其分解吗?也许匿名/宣传册版的网站与经过身份验证?

3 个答案:

答案 0 :(得分:1)

操作人员更喜欢一个大.war,因为这意味着只需要部署一件事。

但是,如果您可以轻松地将您的网站分解为单独的.war,并诚实地部署和取消部署它们而不影响其他部署的文物,并且确定您需要这种粒度(见YAGNI),然后将其分解。

答案 1 :(得分:1)

如果某些模块存在单独的可扩展性,安全性和可靠性要求,那么您可以将其分解。理想情况下,如果需要,您的安全性可以分开

答案 2 :(得分:0)

您需要考虑的几件事情会对您的决定产生重大影响:

  1. 不同的依赖关系 - 我们假设A类需要v1的库L,而B类需要相同的依赖关系,只需要不同的版本--v2。如果在同一个war上部署它们,它们将获得相同的类路径,并且必须对齐所有依赖项版本。如果你拆分它们,你可以在一场战争中使用v1,在另一场战争中使用v2。 这也意味着如果要从v1升级到v3,则只需要测试A类行为,因为B类将保留旧版本。 因此,模块化非常强大。
  2. 服务器的加载时间 - 您拥有的war文件越多,服务器启动所需的时间就越多。
  3. 维护 - 战争文件往往会膨胀,除非你密切关注大小并删除多余的依赖 - 这不是一件容易的事!一些是运行时依赖,一些是编译,一些是测试,一些是生产。这是很多工作,人们倾向于推迟它。如果你有一个膨胀的war文件,有X个冗余依赖项,那就是一个X大小的问题(加载时间,存储浪费以保持每个版本等)。如果您有Y war文件,则问题是X * Y大小。
    换句话说 - 一间卧室的公寓比七卧室别墅更容易清理。