我使用嵌入式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方法在服务器启动时不运行,而是等到第一个应用程序请求和我的应用程序的第一个用户长时间延迟。