| | |
| | | /** |
| | | * SpringDoc配置类 |
| | | * |
| | | * @author ruoyi |
| | | * @author admin |
| | | */ |
| | | @Configuration(proxyBeanMethods = false) |
| | | @ConditionalOnProperty(value = "springdoc.api-docs.enabled", matchIfMissing = true) |
| | |
| | | /** |
| | | * Swagger文档注册器 |
| | | */ |
| | | class SwaggerDocRegister extends Subscriber<InstancesChangeEvent> |
| | | { |
| | | class SwaggerDocRegister extends Subscriber<InstancesChangeEvent> { |
| | | @Autowired |
| | | private SwaggerUiConfigProperties swaggerUiConfigProperties; |
| | | |
| | | @Autowired |
| | | private DiscoveryClient discoveryClient; |
| | | |
| | | private final static String[] EXCLUDE_ROUTES = new String[] { "se-gateway" }; |
| | | private final static String[] EXCLUDE_ROUTES = new String[]{"se-gateway"}; |
| | | |
| | | public SwaggerDocRegister(SwaggerUiConfigProperties swaggerUiConfigProperties, DiscoveryClient discoveryClient) |
| | | { |
| | | public SwaggerDocRegister(SwaggerUiConfigProperties swaggerUiConfigProperties, DiscoveryClient discoveryClient) { |
| | | this.swaggerUiConfigProperties = swaggerUiConfigProperties; |
| | | this.discoveryClient = discoveryClient; |
| | | } |
| | | |
| | | /** |
| | | * 事件回调方法,处理InstancesChangeEvent事件 |
| | | * |
| | | * @param event 事件对象 |
| | | */ |
| | | @Override |
| | | public void onEvent(InstancesChangeEvent event) |
| | | { |
| | | public void onEvent(InstancesChangeEvent event) { |
| | | Set<AbstractSwaggerUiConfigProperties.SwaggerUrl> swaggerUrlSet = discoveryClient.getServices() |
| | | .stream() |
| | | .flatMap(serviceId -> discoveryClient.getInstances(serviceId).stream()) |
| | | .filter(instance -> !StringUtils.equalsAnyIgnoreCase(instance.getServiceId(), EXCLUDE_ROUTES)) |
| | | .map(instance -> { |
| | | AbstractSwaggerUiConfigProperties.SwaggerUrl swaggerUrl = new AbstractSwaggerUiConfigProperties.SwaggerUrl(); |
| | | swaggerUrl.setName(instance.getServiceId()); |
| | | swaggerUrl.setUrl(String.format("/%s/v3/api-docs", instance.getServiceId())); |
| | | return swaggerUrl; |
| | | }) |
| | | .collect(Collectors.toSet()); |
| | | .stream() |
| | | .flatMap(serviceId -> discoveryClient.getInstances(serviceId).stream()) |
| | | .filter(instance -> !StringUtils.equalsAnyIgnoreCase(instance.getServiceId(), EXCLUDE_ROUTES)) |
| | | .map(instance -> { |
| | | AbstractSwaggerUiConfigProperties.SwaggerUrl swaggerUrl = new AbstractSwaggerUiConfigProperties.SwaggerUrl(); |
| | | swaggerUrl.setName(instance.getServiceId()); |
| | | swaggerUrl.setUrl(String.format("/%s/v3/api-docs", instance.getServiceId())); |
| | | return swaggerUrl; |
| | | }) |
| | | .collect(Collectors.toSet()); |
| | | |
| | | swaggerUiConfigProperties.setUrls(swaggerUrlSet); |
| | | } |
| | | |
| | | /** |
| | | * 订阅类型方法,返回订阅的事件类型 |
| | | * |
| | | * @return 订阅的事件类型 |
| | | */ |
| | | @Override |
| | | public Class<? extends Event> subscribeType() |
| | | { |
| | | public Class<? extends Event> subscribeType() { |
| | | return InstancesChangeEvent.class; |
| | | } |
| | | } |