Возможность swagger для документирования нескольких служб, работающих на разных портах - PullRequest
0 голосов
/ 15 октября 2018

Я интегрировал swagger с моими микро сервисами, созданными с помощью Spring boot.Очень здорово документировать каждую операцию сервиса, работающего на конкретном порту.Но здесь я хочу документировать все мои разные сервисы, работающие в разных портах под одной крышей.Так что в одном документе мне нужны все услуги.Возможно ли это с чванством?или есть ли другой способ добиться этого.Пожалуйста, предложите.

Заранее спасибо.

 @SpringBootApplication
@ComponentScan
@EnableAutoConfiguration
@EnableSwagger2
public class App 
{
    public static void main( String[] args )
    {
       // System.out.println( "Hello World!" );
        SpringApplication.run(App.class, args);
    }

    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select() 
                  .apis(Predicates.not(RequestHandlerSelectors.basePackage("com.comcast.BulkSolve.Controller")))
                  .apis(Predicates.not(RequestHandlerSelectors.basePackage("com.comcast.FileProcess.controller")))
                  //.apis(Predicates.not(RequestHandlerSelectors.basePackage("org.springframework.security")))
                     .build();
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("Single swagger")
                .description("API to retrieve swagger apis")
                .version("2.0.0")
                .build();
    }
}

================================

public class GatewaySwaggerResourceProvider implements SwaggerResourcesProvider{

     @Autowired
        private SwaggerServicesConfig swaggerServiceList;

        public GatewaySwaggerResourceProvider() {
        }

    @Override
    public List<SwaggerResource> get() {
        // TODO Auto-generated method stub
         List<SwaggerResource> resources = new ArrayList<>();

            List<SwaggerServices> servList=swaggerServiceList.getServiceList();
            for (SwaggerServices swaggerServices : servList) {
                resources.add(swaggerResource(swaggerServices.getName(), swaggerServices.getUrl(),swaggerServices.getVersion()));
            }
            /*swaggerServiceList.getServiceList().forEach(service -> {
                resources.add(swaggerResource(service.getName(), service.getUrl(), service.getVersion()));
            });*/
            return resources;
    }

    private SwaggerResource swaggerResource(String name, String location, String version) {
        SwaggerResource swaggerResource = new SwaggerResource();
        swaggerResource.setName(name);
        swaggerResource.setLocation(location);
        swaggerResource.setSwaggerVersion(version);
        return swaggerResource;
    }

}

======================================

@Component
@EnableAutoConfiguration
@EnableConfigurationProperties
@ConfigurationProperties(prefix = "documentation.swagger")
public class SwaggerServicesConfig {

     List<SwaggerServices> swagger;

        public List<SwaggerServices> getServiceList() {
            return swagger;
        }

        public void setServiceList(List<SwaggerServices> swaggerResources) {
            this.swagger = swaggerResources;
        }

        @EnableConfigurationProperties
        @ConfigurationProperties(prefix = "documentation.swagger.services")
        public static class SwaggerServices {
            private String name;
            private String url;
            private String version;

            public String getName() {
                return name;
            }

            public void setName(String name) {
                this.name = name;
            }

            public String getUrl() {
                return url;
            }

            public void setUrl(String url) {
                this.url = url;
            }

            public String getVersion() {
                return version;
            }

            public void setVersion(String version) {
                this.version = version;
            }

            @Override
            public String toString() {
                return "SwaggerServices [name=" + name + ", url=" + url + ", version=" + version + "]";
            }

        }

}

Application.yml

server:
  port: 9060

documentation: 
  baseurl: http://localhost
  swagger: 
    services:   
      - 
        name: SolveDocumentation
        url: http://localhost:9003/v2/api-docs
        version: 2.0
      - 
        name: FileprocessDocumentation
        url: http://localhost:9004/v2/api-docs
        version: 2.0

Мой вывод следующий:

enter image description here

9003 API документации: введите описание изображения здесь enter image description here

Ниже приведены ресурсы, которые я получаю за http://localhost:9060/swagger-resources enter image description here

Ниже представлен пользователь swagger-ui, получающий только одну документацию API: enter image description here

1 Ответ

0 голосов
/ 15 октября 2018

У меня была похожая проблема некоторое время назад, когда я пытался объединить чванство нескольких микросервисов.пожалуйста, обратитесь к этому примеру Консолидированный чванель

...