Governator integration¶
Include the Netflix Governator dependency:
implementation "com.netflix.governator:governator:1.17.8"
Governator owns injector creation,
so we need to create custom guicey InjectorFactory
public class GovernatorInjectorFactory implements InjectorFactory {
public Injector createInjector(final Stage stage, final Iterable<? extends Module> modules) {
return LifecycleInjector.builder().withModules(modules).inStage(stage).build().createInjector();
}
}
Configure the new factory in the guice bundle:
@Override
public void initialize(Bootstrap<Configuration> bootstrap) {
bootstrap.addBundle(GuiceBundle.builder()
.injectorFactory(new GovernatorInjectorFactory())
.enableAutoConfig("com.mycompany.myapp")
...
.build()
);
}
Warning
Guicey by default parses configured guice modules and so injector factory receives single synthetic module of parsed elements, instead of configured module instances. Some governator features may require exact module instances and so you may need to disable guicey analysis.
Also, when using overriding modules configuration (with #modulesOverride
configuration)
injector factory also receives syntetic module after {@code Modules.override(modules).with(overridingModules)}.
So you will have not to use this feature when direct module instances required (for some governator features).
Note
Auto scan is enabled and managed bean, described below, will be discovered and installed automatically (assuming its inside scanned package).
Governator Lifecycle¶
Many Governator enhancements are only available when the Governator LifecycleManager is properly started and closed with the application.
Use dropwizard's managed object to control governator lifecycle:
import io.dropwizard.lifecycle.Managed;
import ru.vyarus.dropwizard.guice.GuiceBundle;
import com.netflix.governator.lifecycle.LifecycleManager;
import javax.inject.Inject;
public class GovernatorLifecycle implements Managed {
@Inject
private LifecycleManager manager;
@Override
public void start() throws Exception {
manager.start();
}
@Override
public void stop() throws Exception {
manager.close();
}
}
Guicey will find this managed bean, create governator injector (using a custom factory), create a managed bean instance and register it in dropwizard. This will "bind" the governator lifecycle to the dropwizard lifecycle.
Note
If you need to control the order which the managed beans are started, use the @Order annotation.