spring cloud配置文件开关

在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,其它的属性没有配置,则会采取默认的配置

猜你喜欢

转载自blog.csdn.net/zhangchangbin123/article/details/80026111