我有一個依賴於HBase的重量級連接的JAX-RS應用程序(在Tomcat上運行Jersey 2)。我想在我的應用程序中爲多個資源初始化和重用該連接。我已經建立了一個將單連接綁定到連接的Binder,並使用@Inject annotaton將該連接注入到我的資源中。但是,由於在第一次調用服務之前不會發生注入,因此直到此時纔會初始化連接。如何在REST調用之前初始化注入值?
的應用:
public class MyApplication extends ResourceConfig {
public MyApplication() {
super(MyResource.class);
register(new HbaseBinder());
}
}
的粘合劑:
public class HbaseBinder extends AbstractBinder {
@Override
protected void configure() {
bindAsContract(HbaseConnection.class).in(Singleton.class);
bind(new HbaseConnection()).to(HbaseConnection.class);
}
}
的注射劑:
@Path("/myResource")
public class MyResource {
@Inject
private HbaseConnection hbaseConnection;
...
}
HBase的連接:
@Singleton
public class HbaseConnection {
public Connection getConnection() throws IOException {
...
}
...
}
我想要做的是在應用程序部署時初始化Singleton,這樣它就可以開始第一次調用服務。什麼是正確的方法來做到這一點?
我會想象它會初始化時,你實例化它。是否因爲整個Jersey應用程序在第一個請求之前不加載,或者只有在第一個請求之前連接沒有加載? –
我知道應用程序被加載,因爲我已經能夠添加一個ServletContextListener,並且它在部署時被執行。但是HBase連接直到注入時纔會被實例化,直到第一次調用myResource端點。 –
嘗試和使用[立即作用域](http://stackoverflow.com/a/28123656/2587435) –