Commit 7c195f92 by Nepxion

整合Actuator和Swagger

parent 1cfe5dea
...@@ -24,5 +24,15 @@ ...@@ -24,5 +24,15 @@
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId> <artifactId>spring-boot-starter-actuator</artifactId>
</dependency> </dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
</dependency>
</dependencies> </dependencies>
</project> </project>
\ No newline at end of file
...@@ -13,11 +13,13 @@ import org.springframework.boot.actuate.endpoint.Endpoint; ...@@ -13,11 +13,13 @@ import org.springframework.boot.actuate.endpoint.Endpoint;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; 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.ConfigEndpoint;
import com.nepxion.discovery.plugin.admincenter.endpoint.VersionEndpoint; import com.nepxion.discovery.plugin.admincenter.endpoint.VersionEndpoint;
@Configuration @Configuration
@Import(SwaggerConfiguration.class)
public class AdminAutoConfiguration { public class AdminAutoConfiguration {
@ConditionalOnClass(Endpoint.class) @ConditionalOnClass(Endpoint.class)
protected static class AdminEndpointConfiguration { 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; ...@@ -9,6 +9,10 @@ package com.nepxion.discovery.plugin.admincenter.endpoint;
* @version 1.0 * @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.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.util.Collections; import java.util.Collections;
...@@ -27,6 +31,7 @@ import org.springframework.web.bind.annotation.RequestBody; ...@@ -27,6 +31,7 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody; 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.cache.RuleCache;
import com.nepxion.discovery.plugin.framework.constant.PluginConstant; import com.nepxion.discovery.plugin.framework.constant.PluginConstant;
...@@ -35,6 +40,8 @@ import com.nepxion.discovery.plugin.framework.entity.RuleEntity; ...@@ -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.PluginPublisher;
import com.nepxion.discovery.plugin.framework.event.RuleChangedEvent; import com.nepxion.discovery.plugin.framework.event.RuleChangedEvent;
@RestController
@Api(tags = { "配置接口" })
// 用法参照ServiceRegistryEndpoint和ServiceRegistryAutoConfiguration // 用法参照ServiceRegistryEndpoint和ServiceRegistryAutoConfiguration
@ManagedResource(description = "Config Endpoint") @ManagedResource(description = "Config Endpoint")
public class ConfigEndpoint implements MvcEndpoint { public class ConfigEndpoint implements MvcEndpoint {
...@@ -49,11 +56,11 @@ public class ConfigEndpoint implements MvcEndpoint { ...@@ -49,11 +56,11 @@ public class ConfigEndpoint implements MvcEndpoint {
@Autowired @Autowired
private RuleCache ruleCache; private RuleCache ruleCache;
// 推送规则配置信息 @RequestMapping(path = "/config/send", method = RequestMethod.POST)
@RequestMapping(path = "send", method = RequestMethod.POST) @ApiOperation(value = "推送规则配置信息", notes = "", response = ResponseEntity.class, httpMethod = "POST")
@ResponseBody @ResponseBody
@ManagedOperation @ManagedOperation
public ResponseEntity<?> send(@RequestBody String config) { public ResponseEntity<?> send(@RequestBody @ApiParam(value = "规则配置内容,XML格式", required = true) String config) {
Boolean discoveryControlEnabled = pluginContextAware.isDiscoveryControlEnabled(); Boolean discoveryControlEnabled = pluginContextAware.isDiscoveryControlEnabled();
if (!discoveryControlEnabled) { if (!discoveryControlEnabled) {
return new ResponseEntity<>(Collections.singletonMap("Message", "Discovery control is disabled"), HttpStatus.NOT_FOUND); return new ResponseEntity<>(Collections.singletonMap("Message", "Discovery control is disabled"), HttpStatus.NOT_FOUND);
...@@ -73,8 +80,8 @@ public class ConfigEndpoint implements MvcEndpoint { ...@@ -73,8 +80,8 @@ public class ConfigEndpoint implements MvcEndpoint {
return ResponseEntity.ok().body("OK"); return ResponseEntity.ok().body("OK");
} }
// 查看当前生效的规则配置信息 @RequestMapping(path = "/config/view", method = RequestMethod.GET)
@RequestMapping(path = "view", method = RequestMethod.GET) @ApiOperation(value = "查看当前生效的规则配置信息", notes = "", response = ResponseEntity.class, httpMethod = "GET")
@ResponseBody @ResponseBody
@ManagedOperation @ManagedOperation
public ResponseEntity<?> view() { public ResponseEntity<?> view() {
...@@ -90,7 +97,7 @@ public class ConfigEndpoint implements MvcEndpoint { ...@@ -90,7 +97,7 @@ public class ConfigEndpoint implements MvcEndpoint {
@Override @Override
public String getPath() { public String getPath() {
return "/config"; return "/";
} }
@Override @Override
......
...@@ -9,6 +9,10 @@ package com.nepxion.discovery.plugin.admincenter.endpoint; ...@@ -9,6 +9,10 @@ package com.nepxion.discovery.plugin.admincenter.endpoint;
* @version 1.0 * @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.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
...@@ -25,12 +29,15 @@ import org.springframework.web.bind.annotation.RequestBody; ...@@ -25,12 +29,15 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody; 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.adapter.PluginAdapter;
import com.nepxion.discovery.plugin.framework.context.PluginContextAware; import com.nepxion.discovery.plugin.framework.context.PluginContextAware;
import com.nepxion.discovery.plugin.framework.event.PluginPublisher; import com.nepxion.discovery.plugin.framework.event.PluginPublisher;
import com.nepxion.discovery.plugin.framework.event.VersionChangedEvent; import com.nepxion.discovery.plugin.framework.event.VersionChangedEvent;
@RestController
@Api(tags = { "版本接口" })
@ManagedResource(description = "Version Endpoint") @ManagedResource(description = "Version Endpoint")
public class VersionEndpoint implements MvcEndpoint { public class VersionEndpoint implements MvcEndpoint {
@Autowired @Autowired
...@@ -42,11 +49,11 @@ public class VersionEndpoint implements MvcEndpoint { ...@@ -42,11 +49,11 @@ public class VersionEndpoint implements MvcEndpoint {
@Autowired @Autowired
private PluginPublisher pluginPublisher; private PluginPublisher pluginPublisher;
// 设置服务的动态版本 @RequestMapping(path = "/version/send", method = RequestMethod.POST)
@RequestMapping(path = "send", method = RequestMethod.POST) @ApiOperation(value = "设置服务的动态版本", notes = "", response = ResponseEntity.class, httpMethod = "POST")
@ResponseBody @ResponseBody
@ManagedOperation @ManagedOperation
public ResponseEntity<?> send(@RequestBody String version) { public ResponseEntity<?> send(@RequestBody @ApiParam(value = "版本号", required = true) String version) {
Boolean discoveryControlEnabled = pluginContextAware.isDiscoveryControlEnabled(); Boolean discoveryControlEnabled = pluginContextAware.isDiscoveryControlEnabled();
if (!discoveryControlEnabled) { if (!discoveryControlEnabled) {
return new ResponseEntity<>(Collections.singletonMap("Message", "Discovery control is disabled"), HttpStatus.NOT_FOUND); return new ResponseEntity<>(Collections.singletonMap("Message", "Discovery control is disabled"), HttpStatus.NOT_FOUND);
...@@ -59,8 +66,8 @@ public class VersionEndpoint implements MvcEndpoint { ...@@ -59,8 +66,8 @@ public class VersionEndpoint implements MvcEndpoint {
return ResponseEntity.ok().body("OK"); return ResponseEntity.ok().body("OK");
} }
// 清除服务的动态版本 @RequestMapping(path = "/version/clear", method = RequestMethod.GET)
@RequestMapping(path = "clear", method = RequestMethod.GET) @ApiOperation(value = "清除服务的动态版本", notes = "", response = ResponseEntity.class, httpMethod = "GET")
@ResponseBody @ResponseBody
@ManagedOperation @ManagedOperation
public ResponseEntity<?> clear() { public ResponseEntity<?> clear() {
...@@ -76,8 +83,8 @@ public class VersionEndpoint implements MvcEndpoint { ...@@ -76,8 +83,8 @@ public class VersionEndpoint implements MvcEndpoint {
return ResponseEntity.ok().body("OK"); return ResponseEntity.ok().body("OK");
} }
// 查看服务的本地版本和动态版本 @RequestMapping(path = "/version/view", method = RequestMethod.GET)
@RequestMapping(path = "view", method = RequestMethod.GET) @ApiOperation(value = "查看服务的本地版本和动态版本", notes = "", response = ResponseEntity.class, httpMethod = "GET")
@ResponseBody @ResponseBody
@ManagedOperation @ManagedOperation
public ResponseEntity<List<String>> view() { public ResponseEntity<List<String>> view() {
...@@ -94,7 +101,7 @@ public class VersionEndpoint implements MvcEndpoint { ...@@ -94,7 +101,7 @@ public class VersionEndpoint implements MvcEndpoint {
@Override @Override
public String getPath() { public String getPath() {
return "/version"; return "/";
} }
@Override @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