Commit 7c195f92 by Nepxion

整合Actuator和Swagger

parent 1cfe5dea
......@@ -24,5 +24,15 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
</dependency>
</dependencies>
</project>
\ No newline at end of file
......@@ -13,11 +13,13 @@ import org.springframework.boot.actuate.endpoint.Endpoint;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import com.nepxion.discovery.plugin.admincenter.endpoint.ConfigEndpoint;
import com.nepxion.discovery.plugin.admincenter.endpoint.VersionEndpoint;
@Configuration
@Import(SwaggerConfiguration.class)
public class AdminAutoConfiguration {
@ConditionalOnClass(Endpoint.class)
protected static class AdminEndpointConfiguration {
......
package com.nepxion.discovery.plugin.admincenter.configuration;
/**
* <p>Title: Nepxion Discovery</p>
* <p>Description: Nepxion Discovery</p>
* <p>Copyright: Copyright (c) 2017-2050</p>
* <p>Company: Nepxion</p>
* @author Haojun Ren
* @version 1.0
*/
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration
@EnableSwagger2
public class SwaggerConfiguration extends WebMvcConfigurerAdapter {
@Value("${spring.application.name}")
private String serviceName;
@Value("${swagger.service.base.package}")
private String basePackage;
@Value("${swagger.service.description}")
private String description;
@Value("${swagger.service.version}")
private String version;
@Value("${swagger.service.license}")
private String license;
@Value("${swagger.service.license.url}")
private String licenseUrl;
@Value("${swagger.service.contact.name}")
private String contactName;
@Value("${swagger.service.contact.url}")
private String contactUrl;
@Value("${swagger.service.contact.email}")
private String contactEmail;
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage(basePackage)) // 扫描该包下的所有需要在Swagger中展示的API,@ApiIgnore注解标注的除外
.paths(PathSelectors.any())
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title(serviceName)
.description(description)
.version(version)
.license(license)
.licenseUrl(licenseUrl)
.contact(new Contact(contactName, contactUrl, contactEmail))
.build();
}
// 解决跨域问题
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedHeaders("*")
.allowedMethods("*")
.allowedOrigins("*");
}
}
\ No newline at end of file
......@@ -9,6 +9,10 @@ package com.nepxion.discovery.plugin.admincenter.endpoint;
* @version 1.0
*/
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import java.io.IOException;
import java.io.InputStream;
import java.util.Collections;
......@@ -27,6 +31,7 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import com.nepxion.discovery.plugin.framework.cache.RuleCache;
import com.nepxion.discovery.plugin.framework.constant.PluginConstant;
......@@ -35,6 +40,8 @@ import com.nepxion.discovery.plugin.framework.entity.RuleEntity;
import com.nepxion.discovery.plugin.framework.event.PluginPublisher;
import com.nepxion.discovery.plugin.framework.event.RuleChangedEvent;
@RestController
@Api(tags = { "配置接口" })
// 用法参照ServiceRegistryEndpoint和ServiceRegistryAutoConfiguration
@ManagedResource(description = "Config Endpoint")
public class ConfigEndpoint implements MvcEndpoint {
......@@ -49,11 +56,11 @@ public class ConfigEndpoint implements MvcEndpoint {
@Autowired
private RuleCache ruleCache;
// 推送规则配置信息
@RequestMapping(path = "send", method = RequestMethod.POST)
@RequestMapping(path = "/config/send", method = RequestMethod.POST)
@ApiOperation(value = "推送规则配置信息", notes = "", response = ResponseEntity.class, httpMethod = "POST")
@ResponseBody
@ManagedOperation
public ResponseEntity<?> send(@RequestBody String config) {
public ResponseEntity<?> send(@RequestBody @ApiParam(value = "规则配置内容,XML格式", required = true) String config) {
Boolean discoveryControlEnabled = pluginContextAware.isDiscoveryControlEnabled();
if (!discoveryControlEnabled) {
return new ResponseEntity<>(Collections.singletonMap("Message", "Discovery control is disabled"), HttpStatus.NOT_FOUND);
......@@ -73,8 +80,8 @@ public class ConfigEndpoint implements MvcEndpoint {
return ResponseEntity.ok().body("OK");
}
// 查看当前生效的规则配置信息
@RequestMapping(path = "view", method = RequestMethod.GET)
@RequestMapping(path = "/config/view", method = RequestMethod.GET)
@ApiOperation(value = "查看当前生效的规则配置信息", notes = "", response = ResponseEntity.class, httpMethod = "GET")
@ResponseBody
@ManagedOperation
public ResponseEntity<?> view() {
......@@ -90,7 +97,7 @@ public class ConfigEndpoint implements MvcEndpoint {
@Override
public String getPath() {
return "/config";
return "/";
}
@Override
......
......@@ -9,6 +9,10 @@ package com.nepxion.discovery.plugin.admincenter.endpoint;
* @version 1.0
*/
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
......@@ -25,12 +29,15 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import com.nepxion.discovery.plugin.framework.adapter.PluginAdapter;
import com.nepxion.discovery.plugin.framework.context.PluginContextAware;
import com.nepxion.discovery.plugin.framework.event.PluginPublisher;
import com.nepxion.discovery.plugin.framework.event.VersionChangedEvent;
@RestController
@Api(tags = { "版本接口" })
@ManagedResource(description = "Version Endpoint")
public class VersionEndpoint implements MvcEndpoint {
@Autowired
......@@ -42,11 +49,11 @@ public class VersionEndpoint implements MvcEndpoint {
@Autowired
private PluginPublisher pluginPublisher;
// 设置服务的动态版本
@RequestMapping(path = "send", method = RequestMethod.POST)
@RequestMapping(path = "/version/send", method = RequestMethod.POST)
@ApiOperation(value = "设置服务的动态版本", notes = "", response = ResponseEntity.class, httpMethod = "POST")
@ResponseBody
@ManagedOperation
public ResponseEntity<?> send(@RequestBody String version) {
public ResponseEntity<?> send(@RequestBody @ApiParam(value = "版本号", required = true) String version) {
Boolean discoveryControlEnabled = pluginContextAware.isDiscoveryControlEnabled();
if (!discoveryControlEnabled) {
return new ResponseEntity<>(Collections.singletonMap("Message", "Discovery control is disabled"), HttpStatus.NOT_FOUND);
......@@ -59,8 +66,8 @@ public class VersionEndpoint implements MvcEndpoint {
return ResponseEntity.ok().body("OK");
}
// 清除服务的动态版本
@RequestMapping(path = "clear", method = RequestMethod.GET)
@RequestMapping(path = "/version/clear", method = RequestMethod.GET)
@ApiOperation(value = "清除服务的动态版本", notes = "", response = ResponseEntity.class, httpMethod = "GET")
@ResponseBody
@ManagedOperation
public ResponseEntity<?> clear() {
......@@ -76,8 +83,8 @@ public class VersionEndpoint implements MvcEndpoint {
return ResponseEntity.ok().body("OK");
}
// 查看服务的本地版本和动态版本
@RequestMapping(path = "view", method = RequestMethod.GET)
@RequestMapping(path = "/version/view", method = RequestMethod.GET)
@ApiOperation(value = "查看服务的本地版本和动态版本", notes = "", response = ResponseEntity.class, httpMethod = "GET")
@ResponseBody
@ManagedOperation
public ResponseEntity<List<String>> view() {
......@@ -94,7 +101,7 @@ public class VersionEndpoint implements MvcEndpoint {
@Override
public String getPath() {
return "/version";
return "/";
}
@Override
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment