繁体   English   中英

在 Dropwizard 中注册事件侦听器

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM