在springcloud生态中大多都希望继承的一些组件开箱即用,但是集成过多的组件,需要配置的文件就有一大堆,为了简化配置文件,一些配置文件可以配置开关,采取默认值。这里就以集成swagger为例。
一、集成swagger
1、pom.xml依赖
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.7.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.7.0</version>
</dependency>
2、application.yml配置
swagger:
enable: true
basePackage: com.jin.demo.controller
title: DEMO API
version: 1.0.0
3、接口示例
package com.jin.demo.controller;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
@Api(value = "demo服务")
@RequestMapping("/consumer")
@Controller
public class Consumer1Controller {
private Logger logger = LogManager.getLogger(Consumer1Controller.class);
/**
*
*/
private static final long serialVersionUID = 1L;
@PostMapping("add")
@ApiOperation(value="新增", notes="测试插入")
@ResponseBody
public ResponseEntity<Map> add(HttpServletRequest request ,@RequestBody @ApiParam(value = "实体对象", required = true)Test test){
ResponseEntity<Map> respMap = restTemplateForLoadBalanced.postForEntity("http://SERVICE-ADD/testController/add", test, Map.class);
Map<String,Object> retMap = respMap.getBody();
return respMap;
}
}
---------------------------------------------------------------------------
swagger已经集成好了,但有时候我们需要一个开关,是否使用swagger,并用一个默认的配置
二、简化配置
1、定义SwaggerConfigProperties类
@ConfigurationProperties(prefix="swagger", ignoreUnknownFields = true)
public class SwaggerConfigProperties {
private boolean enable = true;
private String basePackage = "com.jin";
private String title = "DEMO API";
private String contact = "jin";
private String version = "";
public boolean isEnable() {
return enable;
}
public void setEnable(boolean enable) {
this.enable = enable;
}
public String getBasePackage() {
return basePackage;
}
public void setBasePackage(String basePackage) {
this.basePackage = basePackage;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContact() {
return contact;
}
public void setContact(String contact) {
this.contact = contact;
}
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = version;
}
}
2、定义SwaggerConfiguration类
@Configuration
@ConditionalOnProperty(prefix="swagger",name="enable",matchIfMissing=true,havingValue="true")
@ConditionalOnClass(SwaggerConfiguration.class)
@EnableConfigurationProperties(SwaggerConfigProperties.class)
@EnableSwagger2
public class Swagger2Configuration {
@Autowired
private Swagger2ConfigProperties swagger2ConfigProperties;
@Bean
public Docket buildDocket() {
//Predicate<RequestHandler> predicList = RequestHandlerSelectors.any();
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(buildApiInf())
.select()
.apis(RequestHandlerSelectors.basePackage(swaggerConfigProperties.getBasePackage()))//要扫描的API(Controller)基础包 RequestHandlerSelectors.basePackage(swagger2ConfigProperties.getBasePackage())
.paths(PathSelectors.any())
.build();
}
private ApiInfo buildApiInf() {
return new ApiInfoBuilder()
.title(swaggerConfigProperties.getTitle())
.contact(swaggerConfigProperties.getContact())
.version(swaggerConfigProperties.getVersion())
.build();
}
}
这里默认配置已经写好,如果配置为false,则不会启用swagger,如果是true,其它的属性没有配置,则会采取默认的配置