先看下效果圖:
myc-order:代表訂單服務
myc-user:代表用戶服務
myc-car:代表車服務
...等等
下面我簡單說下集成步驟和關鍵點。
1.在每個服務的pom中添加以下依賴。
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
</dependency>
注意:僅僅需要添加這個就行。zuul負責ui
2.將這個放到你的config啓動,注意這裏我用了一個佔位符獲取當前文檔的名稱,避免寫死後續可能添加其他模塊。
@ConditionalOnClass(value = {Swagger.class})
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Value("${spring.application.name}")
private String applicationName;
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("com.miaoyouche"))
.paths(PathSelectors.any())
.build()
.globalOperationParameters(parameters());
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title(applicationName+"接口文檔")
.description(applicationName+"接口文檔")
.contact(new Contact("miaoyouche", "http://www.miaoyouche.com", "[email protected]"))
.version("1.0")
.build();
}
private List<Parameter> parameters() {
ParameterBuilder parameterBuilder = new ParameterBuilder();
List<Parameter> parameters = new ArrayList<>();
parameterBuilder.name("Authorization")
.description("Authorization")
.modelRef(new ModelRef("string"))
.parameterType("header")
.required(false).build();
parameters.add(parameterBuilder.build());
return parameters;
}
}
接着是zuul的配置
3.在zuul的config中添加如下配置,注意這裏有個apiNames是所有的分組服務名,避免寫死,直接從配置文件讀取
@Component
@Primary
public class DocumentationConfig implements SwaggerResourcesProvider {
@Value("${rest.api.names}")
private String[] apiNames;
@Override
public List<SwaggerResource> get() {
List resources = new ArrayList<>();
if (apiNames != null) {
Arrays.stream(apiNames).forEach(s ->
resources.add(swaggerResource(s, "/openapi/" + s + "/v2/api-docs", "2.0"))
);
}
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;
}
}
4.zuul的pom文件中添加以下依賴:
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
</dependency>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>swagger-bootstrap-ui</artifactId>
</dependency>
5.zuul的代理配置:
zuul:
routes:
myc-user:
path: /openapi/myc-user/**
serviceId: myc-user
myc-car:
path: /openapi/myc-car/**
serviceId: myc-car
myc-auth:
path: /openapi/myc-auth/**
serviceId: myc-auth
myc-order:
path: /openapi/myc-order/**
serviceId: myc-order
stripPrefix: true
sensitiveHeaders:
下面就是啓動項目進行訪問了:
http://localhost:port/doc.html