我有一个 WAR(app.war)和一个容器(Tomcat、Jetty、Glassfish 等等)。我的目标是按需在容器上部署数百个相同 Web 应用程序的实例。
http://foo/app1 --> app.war
http://foo/app2 --> app.war
http://foo/app3 --> app.war
...
http://foo/appN --> app.war
实现这一目标的一些明显方法:
- 在 Tomcat 中,为每个应用程序(名为 appN.xml)创建一个 context.xml 文件,所有文件都指向同一个 WAR。其他容器也有类似的方法
- 这种方法的问题:它会爆炸WAR N次,占用大量磁盘空间
- 使用符号链接创建 webapp/{app1,app2,appN} 文件夹,指向 app.war 的扩展版本。这可以防止磁盘空间爆炸,但是 JVM 仍然将许多重复的 JAR 加载到内存中
- 使用一些共享 lib 文件夹来包含大多数 jars(以及前两个选项的组合)。
我想知道是否有更好的方法来做到这一点。理想情况下,创建一个新实例不应该占用更多的磁盘空间(除了边缘配置文件),并且只占用与线程执行堆栈和其他运行时分配相关的内存。
有任何想法吗?