1

我目前有一个没有 web.xml 的 Jersey webapp。它部署得很好,但在收到第一个 Web 请求之前不会启动。

为了让 webapp 在启动时加载,我可以为 webapp 创建一个 web.xml 并给出一个 load-on-startup 标记。但是,我强烈不希望制作 web.xml。

有没有办法让 JAX-RS 应用程序在没有 web.xml 的情况下在启动时加载?我什至会接受特定于 Jersey 和/或 Tomcat 的解决方案。

编辑:我也将接受一个急切地在 Tomcat 实例中加载所有应用程序的解决方案。

编辑:让我根据评论提供有关如何部署应用程序的更多信息。

部署过程并不复杂。

该应用程序将存在于运行 Ubuntu 12.04 的 EC2 实例上。我正在手动设置应用程序的一个实例;一旦它工作,我将创建一个应用程序的 AMI 并根据需要创建它的其他副本。

要在初始实例上部署应用程序,我只需将 WAR 文件复制到/var/lib/tomcat7/webapps并重新启动 Tomcat。此 Tomcat 实例上不会运行其他 Web 应用程序。

如果任何其他信息有用,请告诉我!我会很高兴地添加它。

编辑:为了清楚起见,这就是我的 webappApplication类的外观,在高层次上:

@ApplicationPath("/")
public class App extends ResourceConfig {
    // ...
}

我使用 Jersey-specificResourceConfig类而不是更通用的 JAX-RSApplication类,因为我使用 Jersey 的内置 HK-2 进行一些依赖注入。

4

2 回答 2

1

我能想到的唯一方法是切换到自己设置 Jersey ServletContainer并将其“启动时负载”值设置为大于零的值。您可以使用ServletContainerInitializer(没有关系——命名只是巧合)来做到这一点。如果您碰巧使用的是 Spring,它的WebApplicationInitializer提供了相同的机制,但界面稍微方便一些。

另一种相当老套的方法是编写一个扩展 ServletContainer 的类并给它一个适当的 Servlet 3.0 注释,例如@WebServlet(value="/", loadOnStartup=1)

于 2013-10-19T23:48:32.860 回答
1

一种解决方案是通过简单地添加对部署脚本curl的调用来强制向应用程序发出第一个请求。wget它具有预热任何缓存的额外优势。它可以用于测试部署和应用程序是否真的有效。(只需检查响应页面上的 HTTP 状态代码或一些文本...)

于 2014-05-07T08:45:17.747 回答