0

I am creating a Dropwizard application. I am using Guice for dependency injection as following.

public class NexusServiceApplication extends Application<NexusServiceConfiguration> {

    public static void main(final String[] args) throws Exception {
        new com.tarkshala.tavahot.NexusServiceApplication().run(args);
    }

    @Override
    public String getName() {
        return "NexusService";
    }

    @Override
    public void initialize(final Bootstrap<NexusServiceConfiguration> bootstrap) {

        bootstrap.addBundle(new SwaggerBundle<>() {

            @Override
            protected SwaggerBundleConfiguration getSwaggerBundleConfiguration(NexusServiceConfiguration configuration) {
                return configuration.swaggerBundleConfiguration;
            }
        });

        bootstrap.addBundle(GuiceBundle.builder()
                .enableAutoConfig(getClass().getPackage().getName())
                .modules(
                        // Nexus's local guice modules
                        new ServiceModule(nexusServiceConfiguration)
                ).build());

        // Using to deserialize lower case enums from external service like payment gateway(CASHFREE)
        bootstrap.getObjectMapper().enable(MapperFeature.ACCEPT_CASE_INSENSITIVE_ENUMS);
        bootstrap.getObjectMapper().setSerializationInclusion(JsonInclude.Include.NON_NULL);
    }

    @Override
    public void run(final NexusServiceConfiguration configuration,
                    final Environment environment) {
        // Common resources registration
        environment.jersey().packages(getClass().getPackage().getName());
    }

}

My NexusServiceConfiguration looks like following:

@Data
public class NexusServiceConfiguration extends Configuration {

    @JsonProperty("swagger")
    public SwaggerBundleConfiguration swaggerBundleConfiguration;

    @JsonProperty("sharded")
    private ShardedHibernateFactory shardingConfig = new ShardedHibernateFactory();

    @JsonProperty("rmqConfig")
    private RMQConfig rmqConfig;

    @JsonProperty("nexusActors")
    private Map<ActionType, ActorConfig> nexusActors;

    @JsonProperty("feedActors")
    private Map<ActionType, ActorConfig> feedActors;

    @JsonProperty("cashfreeHttpConfiguration")
    private HttpConfiguration cashfreeHttpConfiguration;
}

My Guice module looks like following:

public class ServiceModule extends AbstractModule {

    private NexusServiceConfiguration nexusServiceConfiguration;

    public ServiceModule(NexusServiceConfiguration nexusServiceConfiguration) {
        this.nexusServiceConfiguration = nexusServiceConfiguration;
    }

    @Provides
    @Singleton
    public HttpConfiguration provideCashfreeHttpConfiguration() {
        return this.nexusServiceConfiguration.getCashfreeHttpConfiguration();
    }

    @Override
    protected void configure() {
        super.configure();
    }
}

Is there a way to access nexusServiceConfiguration in initialize method of application?

Kuldeep Yadav
  • 1,664
  • 5
  • 23
  • 41

0 Answers0