我使用嵌入式 Grizzly Web 服务器来托管带有 Jersey 的 RESTful Web 服务。这一切正常。
我的问题是当我启动服务器而不是等待第一个传入的客户端请求时,如何强制 Web 应用程序上下文急切地初始化。这是一个小问题,但我想解决一个。
我像这样启动嵌入式服务器:
public final class TestApplication {
public TestApplication() throws Exception {
HttpServer httpServer = GrizzlyHttpServerFactory.createHttpServer(
"http://0.0.0.0:8888",
new ResourceConfig()
.registerInstances(
new TestBinder(),
)
.registerClasses(
JacksonJsonProvider.class,
)
.packages(
AbstractResource.class.getPackage().getName()
),
true
);
}
}
“TestBinder”配置了我需要的依赖注入,该类如下所示:
final class TestBinder extends AbstractBinder {
@Override
protected void configure() {
bind(CatalogManager.class).to(CatalogManager.class).in(Singleton.class);
}
}
最后,“CatalogManager”是一个单例,用于预加载和缓存我的应用程序通过 RESTful Web 服务公开的所有静态数据。
“CatalogManager”的本质是这样的:
public final class CatalogManager {
@PostConstruct
public void initialise() {
// Load and cache a large application data-set here...
}
}
所以问题是依赖注入和@PostConstruct 方法在服务器启动时不会运行,而是等到第一个应用程序请求并且我的应用程序的第一个用户得到很长的延迟。