Commit c9fa7d04 authored by lihaipeng's avatar lihaipeng

swagger

parent 6666f7d8
......@@ -21,7 +21,17 @@
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<artifactId>spring-cloud-openfeign-core</artifactId>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
</dependencies>
......
package com.unififi.api;
import com.unififi.model.User;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
......@@ -8,17 +10,21 @@ import org.springframework.web.bind.annotation.*;
import java.util.List;
@FeignClient(value = "unififi-demo2-service")
@Api(tags = "用户操作")
public interface UserApi {
@RequestMapping(value = "/echo/{string}", method = RequestMethod.GET)
String echo(@PathVariable String string);
@ApiOperation(value = "用户列表")
@GetMapping("/user/list")
List<User> list();
@ApiOperation(value = "用户详情")
@GetMapping("/user/get")
User get(@RequestParam("name") String name);
@ApiOperation(value = "用户添加")
@PostMapping(value = "/user/add", produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
Boolean add(@RequestBody User user);
......
package com.unififi.model;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
@Data
@ApiModel(value = "用户信息")
public class User {
@NotNull
@ApiModelProperty(value = "用户名", required = true)
private String name;
@ApiModelProperty(value = "年龄")
private Integer age;
}
......@@ -39,6 +39,11 @@
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
......
package com.unififi;
import com.purgeteam.dynamic.config.starter.annotation.EnableDynamicConfigEvent;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
......@@ -10,7 +9,6 @@ import org.springframework.cloud.openfeign.EnableFeignClients;
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
@EnableDynamicConfigEvent
public class Demo1Application {
public static void main(String[] args) {
......
package com.unififi.config;
import lombok.Getter;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.annotation.Configuration;
@Configuration
@RefreshScope
@Getter
@Data
public class AppConfig {
@Value("${user.name}")
......
package com.unififi.config;
import com.purgeteam.dynamic.config.starter.annotation.EnableDynamicConfigEvent;
import com.purgeteam.dynamic.config.starter.event.ActionConfigEvent;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.ApplicationListener;
......@@ -7,6 +8,7 @@ import org.springframework.stereotype.Component;
@Slf4j
@Component
@EnableDynamicConfigEvent
public class AppConfigListener implements ApplicationListener<ActionConfigEvent> {
@Override
......
package com.unififi.config.logger;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import java.util.ArrayList;
import java.util.List;
@Configuration
@EnableConfigurationProperties
@ConfigurationProperties(ignoreInvalidFields = true, prefix = LoggerConfig.PREFIX)
public class LoggerConfig {
......
......@@ -13,6 +13,7 @@ public class RetryLogListener extends RetryListenerSupport {
@Override
public <T, E extends Throwable> void onError(RetryContext context, RetryCallback<T, E> callback, Throwable throwable) {
logger.warn("UNIFIFI-RETRY serviceId:{} count:{} exhausted:{} msg:{}", ((LoadBalancedRetryContext) context).getServiceInstance().getServiceId(), context.getRetryCount(), context.isExhaustedOnly(), throwable.getMessage());
LoadBalancedRetryContext loadBalancedRetryContext = (LoadBalancedRetryContext) context;
logger.warn("UNIFIFI-RETRY serviceId:{} count:{} exhausted:{} msg:{}", (loadBalancedRetryContext.getServiceInstance() != null ? loadBalancedRetryContext.getServiceInstance().getServiceId() : null), context.getRetryCount(), context.isExhaustedOnly(), throwable.getMessage());
}
}
package com.unififi.config.swagger;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
import javax.xml.ws.Response;
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Value("${swagger.enable:false}")
private Boolean enable;
@Value("${spring.cloud.nacos.discovery.metadata.unififi.service.version}")
private String serviceVersion;
@Value("${spring.application.name}")
private String serviceName;
@Bean
public Docket docket() {
return new Docket(DocumentationType.SWAGGER_2)
.enable(enable)
.apiInfo(apiInfo())
.genericModelSubstitutes(Response.class)
.forCodeGeneration(true)
.select()
.apis(RequestHandlerSelectors.basePackage("com.unififi.controller"))
.paths(PathSelectors.any())
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title(serviceName)
.version(serviceVersion)
.build();
}
}
\ No newline at end of file
package com.unififi.controller;
import com.unififi.config.AppConfig;
import com.unififi.api.UserApi;
import com.unififi.config.AppConfig;
import com.unififi.model.User;
import com.unififi.service.UserService;
import lombok.extern.slf4j.Slf4j;
......
#server:
# port: 18081
# compression:
# enabled: true
# min-response-size: 2048
# mime-types: 'application/json'
# endpoints:
# web:
# exposure:
# include: '*'
#spring:
# profiles:
# active: dev
# application:
# name: unififi-demo1-service
#
#feign:
# httpclient:
# enabled: true
# max-connections: 20
# max-connections-per-route: 5
# time-to-live: 90
# connection-timeout: 3999
# connection-timer-repeat: 30000
# compression:
# request:
# enabled: true
# mime-types: application/json
# min-request-size: 1024
# response:
# enabled: true
# useGzipDecoder: true
# client:
# config:
# default:
# connectTimeout: 2000
# readTimeout: 2000
# loggerLevel: full
# unififi-demo2-service:
# connectTimeout: 2001
# readTimeout: 2001
# loggerLevel: basic
#
#logging:
# level:
# com.unififi.demo.service.UserApi: DEBUG
# com.alibaba.nacos.client.config.impl.ClientWorker: WARN
#
#ribbon:
## restclient:
## enabled: true
# eager-load:
# enabled: true
# clients: unififi-demo2-service
# ConnectTimeout: 2002
# ReadTimeout: 2002
# MaxAutoRetries: 0
# MaxAutoRetriesNextServer: 1
# NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
# retryableStatusCodes: 503,500
#unififi-demo2-service:
# ribbon:
# ConnectTimeout: 2003
# ReadTimeout: 2003
# MaxAutoRetries: 1
# MaxAutoRetriesNextServer: 2
# NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RoundRobinRule
# retryableStatusCodes: 503,500,501
server:
shutdown
port: 18081
compression:
enabled: true
......@@ -10,16 +9,14 @@ server:
exposure:
include: '*'
spring:
profiles:
active: dev
application:
name: unififi-demo1-service
cloud:
nacos:
username: nacos
password: nacos
#server-addr: 39.106.6.97:8848
server-addr: localhost:8848
server-addr: 39.106.6.97:8848
#server-addr: localhost:8848
config:
file-extension: yaml
shared-configs:
......@@ -36,5 +33,4 @@ spring:
metadata:
unififi.mode: ${unififi.mode}
unififi.service.version: '@unififi-service.version@'
user.home: ${user.home}
unififi.env: ${spring.profiles.active}
\ No newline at end of file
......@@ -39,14 +39,11 @@
<logger name="org.springframework" level="WARN"/>
<!-- 开发环境输出到控制台 -->
<springProfile name="dev">
<root level="INFO">
<appender-ref ref="STDOUT"/>
</root>
</springProfile>
<root level="INFO">
<appender-ref ref="ASYNC"/>
</root>
<springProfile name="dev">
</springProfile>
</configuration>
......@@ -35,6 +35,11 @@
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
......
package com.unififi;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@MapperScan("com.unififi.mapper")
@SpringBootApplication
@EnableDiscoveryClient
public class Demo2Application {
......
package com.unififi.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
import javax.xml.ws.Response;
@Configuration
@EnableConfigurationProperties
@EnableSwagger2
public class SwaggerConfig {
@Value("${swagger.enable:false}")
private Boolean enable;
@Value("${spring.cloud.nacos.discovery.metadata.unififi.service.version}")
private String version;
@Bean
public Docket docket() {
// ParameterBuilder parameterBuilder = new ParameterBuilder();
// List<Parameter> heads = new ArrayList<Parameter>();
// parameterBuilder.name("token")
// .description("访问令牌")
// .modelRef(new ModelRef("string"))
// .parameterType("header")
// .required(false)
// .build();
// heads.add(parameterBuilder.build());
return new Docket(DocumentationType.SWAGGER_2)
.enable(enable)
.apiInfo(apiInfo())
.genericModelSubstitutes(Response.class)
.forCodeGeneration(true)
.select()
.apis(RequestHandlerSelectors.basePackage("com.unififi.controller"))
.paths(PathSelectors.any())
.build();
// .globalOperationParameters(heads);
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("unififi-demo2-service API")
.description("demo2服务")
.version(version)
.build();
}
}
\ No newline at end of file
#server:
# port: 18080
#management:
# endpoints:
# web:
# exposure:
# include: '*'
#spring:
# profiles:
# active: dev
# application:
# name: unififi-demo2-service
# datasource:
# driver-class-name: com.mysql.jdbc.Driver
# #url: jdbc:mysql://39.106.6.97:3306/unififi_spring_cloud_guide?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
# #username: unififi
# #password: YQA6o9pw1r
# url: jdbc:mysql://localhost:3306/unififi_spring_cloud_guide?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
# username: root
# password: root
# druid:
# # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
# filters: config,wall,stat
# # 初始化数量
# initialSize: 5
# # 最小连接池数量
# minIdle: 5
# # 最大连接池数量
# maxActive: 20
# # 连接超时时间
# maxWait: 60000
# # 打开psCache, 对支持游标的数据库性能提升巨大
# poolPreparedStatements: true
# # 指定每个连接PsCache的大小
# maxPoolPreparedStatementPerConnectionSize: 20
# # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
# timeBetweenEvictionRunsMillis: 60000
# # 指定一个空闲连接最少空闲多久后可被清除,单位是毫秒
# minEvictableIdleTimeMillis: 300000
# # 验证数据库连接的查询语句
# validationQuery: select 1
# # 当连接空闲时,是否执行连接测试
# testWhileIdle: true
# # 当从连接池借用连接时,是否测试该连接
# testOnBorrow: false
# # 在连接归还到连接池时是否测试该连接
# testOnReturn: false
# # 打开mergeSql,慢sql记录
# connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
## redis:
## database: 0
## host: localhost
## port: 13350
## # 连接超时时间
## timeout: 5000
## lettuce:
## pool:
## # 连接池最大连接数,默认8
## max-active: 8
## # 连接池中的最大空闲连接,默认8
## max-idle: 8
## # 连接池中的最小空闲连接,默认0
## min-idle: 5
## # 连接池最大阻塞等待时间,默认-1
## max-wait:
\ No newline at end of file
......@@ -14,8 +14,8 @@ spring:
nacos:
username: nacos
password: nacos
#server-addr: 39.106.6.97:8848
server-addr: localhost:8848
server-addr: 39.106.6.97:8848
#server-addr: localhost:18848
config:
file-extension: yaml
shared-configs:
......
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