我希望基于配置值在生产环境中禁用swagger功能/端点。
我将如何处理?
我相信实现此目标的最佳方法是,在DropWizard应用程序首次启动时,在执行initialize方法的过程中不要添加捆绑包。
此解决方案的问题在于,您无法访问从YAML / YML文件中的值填充的配置get方法。当应用程序进入run方法时,这些值可用。
这是我从应用程序类初始化的方法
@Override
public void initialize(Bootstrap<Configuration> bootstrap) {
LOGGER.debug("initialize");
bootstrap.setConfigurationSourceProvider(new SubstitutingSourceProvider(bootstrap.getConfigurationSourceProvider(),
new EnvironmentVariableSubstitutor(false)));
bootstrap.addBundle(new SwaggerBundle<Configuration>() {
@Override
protected SwaggerBundleConfiguration getSwaggerBundleConfiguration(Configuration configuration) {
return configuration.swaggerBundleConfiguration;
}
});
}
如果我需要澄清更多信息,请告诉我。
谢谢。
答案 0 :(得分:2)
您可以在生产环境中设置环境变量,并使用它来决定是否包括SwaggerBundle。例如:
if (!"prod".equalsIgnoreCase(System.getenv("ENVIRONMENT"))) {
bootstrap.addBundle(new SwaggerBundle<Configuration>() { ... }
}
答案 1 :(得分:0)
我当时使用的是DropWizard的旧版本。
更新后,提供了新的方法,包括 setIsEnabled()
这是为解决此问题而添加的。
bootstrap.addBundle(new SwaggerBundle<Configuration>() {
@Override
protected SwaggerBundleConfiguration getSwaggerBundleConfiguration(Configuration configuration) {
if(!configuration.getSwaggerEnabled()){
configuration.swaggerBundleConfiguration.setIsEnabled(false);
}
return configuration.swaggerBundleConfiguration;
}
});
}
谢谢