在微服务中,Swagger是每个服务 比如会员服务,订单服务,支付服务 进行继承、
如何将整个微服务中的Swagger进行合成,同一台服务器上。
使用Zuul+Swagger实现管理整个微服务API文档
使用Nginx+Swagger以不同的项目区分跳转到不同的接口文档
Spring Boot支持对Swagger管理,只需要Zuul网关添加对应服务Swagger文档即可
1、会员服务和订单服务都引入对swagger的maven支持
io.springfox
springfox-swagger2
2.8.0
io.springfox
springfox-swagger-ui
2.8.0
等于:(Spring Boot已经整合好了)
两者选择其一
然后启动类需要:
@EnableSwagger2Doc
接着,controller中需要:
类上注解
@Api("订单接口")
接口方法上
@ApiOperation("订单服务接口")
@PostMapping("/getOrder")
yml加入扫包范围:
swagger:
base-package: com.toov5.api
(每个服务都一样)
如Member:
package com.toov5.api.service.impl;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.toov5.api.entity.UserEntity;
import com.toov5.api.service.IMemberService;
import com.toov5.base.BaseApiService;
import com.toov5.base.ResponseBase;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
@RestController
@Api("会员服务接口")
public class MemberServiceImpl extends BaseApiService implements IMemberService {
@Value("${server.port}")
private String serverPort;
@RequestMapping("/getMember")
public UserEntity getMember(@RequestParam("name") String name) {
UserEntity userEntity = new UserEntity();
userEntity.setName(name);
userEntity.setAge(10);
return userEntity;
}
@RequestMapping("/getUserInfo")
public ResponseBase getUserInfo() {
try {
Thread.sleep(1500);
} catch (Exception e) {
}
return setResultSuccess("getUserInfo调用成功....");
}
@RequestMapping("/")
public String Index() {
return "我是member"+serverPort;
}
@ApiOperation(value = "获取会员信息接口") // 具体描述
@ApiImplicitParam(name = "userName", value = "用户信息参数", required = true, dataType = "String") // 传入的参数 ,描述 , 必须传递true // , 类型String
@GetMapping("/getMemberInfo")
public String getMemberInfo(String userName) {
System.out.println(userName);
return "userName" + userName;
}
}
启动:
package com.toov5.api.service.impl;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import com.spring4all.swagger.EnableSwagger2Doc;
@SpringBootApplication (scanBasePackages={"com.toov5.*"})
@EnableEurekaClient
@EnableFeignClients
@EnableSwagger2Doc //开启swagger文档)
public class AppMember {
public static void main(String[] args) {
SpringApplication.run(AppMember.class, args);
}
}
yml
server:
port: 8005
spring:
application:
name: app-toov5-member
ַ
eureka:
client:
service-url:
defaultZone: http://localhost:8100/eureka
register-with-eureka: true
fetch-registry: true
swagger:
base-package: com.toov5.api.service.impl
也需要引入相同的pom
然后启动类:
package com.toov5;
import java.util.ArrayList;
import java.util.List;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Component;
import com.spring4all.swagger.EnableSwagger2Doc;
import springfox.documentation.swagger.web.SwaggerResource;
import springfox.documentation.swagger.web.SwaggerResourcesProvider;
@SpringBootApplication
@EnableEurekaClient
@EnableZuulProxy //开启网关代理
@EnableSwagger2Doc //开启swagger
public class AppGateway {
public static void main(String[] args) {
SpringApplication.run(AppGateway.class, args);
}
// 添加文档来源
@Component
@Primary
class DocumentationConfig implements SwaggerResourcesProvider {
public List get() {
List resources = new ArrayList
yml配置:
###注册 中心
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8100/eureka/
server: ##api网关端口号
port: 81
###网关名称
spring: ##网关服务名称
application:
name: service-zuul
###网关名称
cloud:
config:
####读取后缀
profile: dev
####读取config-server注册地址
discovery:
service-id: confi
### 配置网关反向代理
zuul:
routes:
api-member: ##随便写的
### 以 /api-member/访问转发到会员服务 通过别名找
path: /api-member/**
serviceId: app-toov5-member ##别名 如果集群的话 默认整合了ribbon 实现轮训 负载均衡
api-order: ##随便写的
### 以 /api-order/访问转发到订单服务
path: /api-order/**
serviceId: app-toov5-order ##别名
与yml的对应!
启动 eureka zuul member 然后访问
获取接口文档