| | |
| | | |
| | | import java.util.Set; |
| | | import java.util.stream.Collectors; |
| | | |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.springdoc.core.AbstractSwaggerUiConfigProperties; |
| | | import org.springdoc.core.SwaggerUiConfigProperties; |
| | | import org.springframework.beans.factory.InitializingBean; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; |
| | | import org.springframework.cloud.client.discovery.DiscoveryClient; |
| | | import org.springframework.context.annotation.Configuration; |
| | |
| | | import com.alibaba.nacos.common.notify.Event; |
| | | import com.alibaba.nacos.common.notify.NotifyCenter; |
| | | import com.alibaba.nacos.common.notify.listener.Subscriber; |
| | | |
| | | import javax.annotation.Resource; |
| | | |
| | | /** |
| | |
| | | @ConditionalOnProperty(value = "springdoc.api-docs.enabled", matchIfMissing = true) |
| | | public class SpringDocConfig implements InitializingBean |
| | | { |
| | | @Autowired |
| | | @Resource |
| | | private SwaggerUiConfigProperties swaggerUiConfigProperties; |
| | | |
| | | @Autowired |
| | | @Resource |
| | | private DiscoveryClient discoveryClient; |
| | | |
| | | /** |
| | |
| | | @Resource |
| | | private DiscoveryClient discoveryClient; |
| | | |
| | | private final static String[] EXCLUDE_ROUTES = new String[] { "se-gateway", "se-auth", "se-file", "se-monitor", "se-system" }; |
| | | private final static String[] EXCLUDE_ROUTES = new String[] { "se-gateway", "se-auth", "se-file", "se-monitor" }; |
| | | |
| | | public SwaggerDocRegister(SwaggerUiConfigProperties swaggerUiConfigProperties, DiscoveryClient discoveryClient) |
| | | { |
| | |
| | | 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); |
| | | } |