[英]Register an event listener in Dropwizard
是否有任何可能的方式在 Dropwizard 中注册侦听器,相当于 Spring Boot 中的以下实现:
@EventListener(ApplicationReadyEvent.class)
public void registerMessagingEvents() {
registerListener1();
registerListener2();
}
您可以将ServerLifecycleListener
添加到 Dropwizard Environment
。
通常这是在您的Application
子类的run()
方法中完成的。
例如:
@Override
public void run(YourApplicationConfiguration config, Environment environment) {
environment.lifecycle().addServerLifecycleListener(new ServerLifecycleListener() {
@Override
public void serverStarted(Server server) {
// do something
}
});
// ... others
}
尽管“Jetty server ready”(这是 Dropwizard 生命周期事件所指示的)与 Spring Boot 的ApplicationReadyEvent
并不完全相同,但它是 Dropwizard 提供的等效钩子,它可能足以满足您的需求。
文档中的更多详细信息。
另一种可能的实现可能是使用environment.lifecycle().addLifeCycleListener
。
当您需要访问某些注入的类/实例时,它很有用。 例如:
//In the run method
Injector injector = Guice.createInjector(myModule); //existing code
...
// somewhere in the end of the run method
environment.lifecycle().addLifeCycleListener(
new ServerLifecycleListener(injector.getInstance(MyService.class)));
//And then implement the listener ServerLifecycleListener class:
private static class ServerLifecycleListener implements LifeCycle.Listener {
private MyService myService;
ServerLifecycleListener(MyService myService) {
this.myService = myService;
}
@Override
public void lifeCycleStarting(LifeCycle lifeCycle) {
}
@Override
public void lifeCycleStarted(LifeCycle lifeCycle) {
myService.doSomething();
}
@Override
public void lifeCycleFailure(LifeCycle lifeCycle, Throwable throwable) {
}
@Override
public void lifeCycleStopping(LifeCycle lifeCycle) {
}
@Override
public void lifeCycleStopped(LifeCycle lifeCycle) {
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.