springboot(四)

本文详细介绍了如何在SpringBoot项目中集成Swagger,包括Swagger的基本概念、配置、API分组以及实体配置。接着讲解了SpringBoot中的异步任务实现,包括异步处理、邮件任务和定时任务的配置与测试。最后,文章深入探讨了Dubbo和Zookeeper的集成,解释了分布式理论,解释了RPC的概念,以及如何搭建测试环境并实现SpringBoot与Dubbo、Zookeeper的整合。
摘要由CSDN通过智能技术生成

目录

17.Swaggger

1.Swagger简介

2.SpringBoot集成Swagger

3.配置Swagger 

4.配置扫描接口

5.配置Swagger开关

6.配置API分组

7.实体配置 

8.常用注解

18.异步-邮件-定时任务

1.异步任务

2.邮件任务

3.定时任务

19.Dubbo和Zookeeper集成

1.分布式理论

2.什么是RPC 

3.测试环境搭建

4.SpringBoot + Dubbo + zookeeper


17.Swaggger

1.Swagger简介

前后端分离

  • 前端 -> 前端控制层、视图层

  • 后端 -> 后端控制层、服务层、数据访问层

  • 前后端通过API进行交互

  • 前后端相对独立且松耦合

产生的问题

  • 前后端集成,前端或者后端无法做到“及时协商,尽早解决”,最终导致问题集中爆发

解决方案

  • 首先定义schema [ 计划的提纲 ],并实时跟踪最新的API,降低集成风险

Swagger

  • 号称世界上最流行的API框架

  • Restful Api 文档在线自动生成器 => API 文档 与API 定义同步更新

  • 直接运行,在线测试API

  • 支持多种语言 (如:Java,PHP等)

  • 官网:https://swagger.io/

2.SpringBoot集成Swagger

SpringBoot集成Swagger => springfox,两个jar包

  • Springfox-swagger2

  • swagger-springmvc

使用Swagger

要求:jdk 1.8 + 否则swagger2无法运行

步骤:

  • 1.新建一个SpringBoot-web项目
  • 2.添加Maven依赖
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-boot-starter</artifactId>
            <version>3.0.0</version>
        </dependency>
  • 3.编写HelloController,测试确保运行成功!
@RestController
public class HelloController {
    @RequestMapping(value = "/hello")
    public String hello(){
        return "hello";
    }
}
  • 4.要使用Swagger,我们需要编写一个配置类-SwaggerConfig来配置 Swagger
@Configuration //配置类
@EnableOpenApi// 3.0替代了Swagger2
public class SwaggerConfig {  
}
  • 5.在主启动类上添加@EnableWebMvc
@SpringBootApplication
@EnableWebMvc
public class SwaggerDemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(SwaggerDemoApplication.class, args);
    }

}
  • 6.访问测试 :http://localhost:8080/swagger-ui/index.html ,可以看到swagger的界面;

3.配置Swagger 

  • 1.Swagger实例Bean是Docket,所以通过配置Docket实例来配置Swaggger。
@Bean //配置docket以配置Swagger具体参数
public Docket docket() {
   return new Docket(DocumentationType.SWAGGER_2);
}
  • 2.可以通过apiInfo()属性配置文档信息
//配置文档信息
    private ApiInfo apiInfo() {
        Contact contact = new Contact("联系人名字", "http://xxx.xxx.com/联系人访问链接", "联系人邮箱");
        return new ApiInfo(
                "Swagger学习", // 标题
                "学习演示如何配置Swagger", // 描述
                "v1.0", // 版本
                "https://www.baidu.com/", // 组织链接
                contact, // 联系人信息
                "Apach 2.0 许可", // 许可
                "许可链接", // 许可连接
                new ArrayList<>()// 扩展
        );
    }
  • 3.Docket 实例关联上 apiInfo()
@Bean
public Docket docket() {
   return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo());
}
  • 4.重启项目,访问测试 http://localhost:8080/swagger-ui/index.html  看下效果;

4.配置扫描接口

  • 1.构建Docket时通过select()方法配置怎么扫描接口。
@Bean //配置docket以配置Swagger具体参数
    public Docket docket() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()// 通过.select()方法,去配置扫描接口,RequestHandlerSelectors配置如何扫描接口
                .apis(RequestHandlerSelectors.basePackage("com.jiang.controller"))
                .build();
    }
  • 2.重启项目测试,由于我们配置根据包的路径扫描接口,所以我们只能看到一个类
  • 3.除了通过包路径配置扫描接口外,还可以通过配置其他方式扫描接口,这里注释一下所有的配置方式:
    //any():扫描所有,项目中的所有接口都会被扫描到
    //none():不扫描接口
    //withMethodAnnotation(final Class<? extends Annotation> annotation):通过方法上的注解扫描,如withMethodAnnotation(GetMapping.class)只扫描get请求
    //withClassAnnotation(final Class<? extends Annotation> annotation):通过类上的注解扫描,如.withClassAnnotation(Controller.class)只扫描有controller注解的类中的接口
    //basePackage:指定要扫描的包
  • 4.除此之外,我们还可以配置接口扫描过滤:
@Bean //配置docket以配置Swagger具体参数
    public Docket docket() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()// 通过.select()方法,去配置扫描接口,RequestHandlerSelectors配置如何扫描接口
                .apis(RequestHandlerSelectors.basePackage("com.jiang.controller"))
                .paths(PathSelectors.ant("/jiang/**"))
                .build();
    }
  • 5.这里的可选值还有
//any():任何请求都扫描
//none():任何请求都不扫描
//regex(final String pathRegex):通过正则表达式控制
//ant(final String antPattern):通过ant()控制 ant(加上指定路径)

5.配置Swagger开关

  • 1.通过enable()方法配置是否启用swagger,如果是false,swagger将不能在浏览器中访问了
    @Bean //配置docket以配置Swagger具体参数
    public Docket docket() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                //配置是否启用Swagger,如果是false,在浏览器将无法访问
                .enable(false)
                // 通过.select()方法,去配置扫描接口,RequestHandlerSelectors配置如何扫描接口
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.jiang.controller"))
                .paths(PathSelectors.ant("/jiang/**"))
                .build();
    }
  • 2.如何动态配置当项目处于test、dev环境时显示swagger,处于prod时不显示?

新建两个配置文件application-dev.properties和application-test.properties,并分别赋予端口号,然后使用application.properties来指定环境

application-dev.properties

server.port=8081

application-test.properties

server.port=8082

application.properties

spring.profiles.active=dev
    @Bean //配置docket以配置Swagger具体参数
    public Docket docket(Environment environment) {
        // 设置要显示swagger的环境
        Profiles of = Profiles.of("dev","test");
        // 判断当前是否处于该环境
        // 通过environment.acceptsProfiles判断是否已经处在自己设置的环境当中 enable()接收此参数判断是否要显示
        boolean flag = environment.acceptsProfiles(of);

        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                //配置是否启用Swagger,如果是false,在浏览器将无法访问
                .enable(flag)
                // 通过.select()方法,去配置扫描接口,RequestHandlerSelectors配置如何扫描接口
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.jiang.controller"))
                .paths(PathSelectors.ant("/jiang/**"))
                .build();
    }
  • 3.测试Profiles of = Profiles.of(); 中不加dev的测试

  •  4.测试Profiles of = Profiles.of(); 中加dev的测试

6.配置API分组

  • 1.如果没有配置分组,默认是default。通过groupName()方法即可配置分组:
    @Bean //配置docket以配置Swagger具体参数
    public Docket docket(Environment environment) {
        // 设置要显示swagger的环境
        Profiles of = Profiles.of("dev", "test");
        // 判断当前是否处于该环境
        // 通过environment.acceptsProfiles判断是否已经处在自己设置的环境当中 enable()接收此参数判断是否要显示
        boolean flag = environment.acceptsProfiles(of);

        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .groupName("雙馬")
                //配置是否启用Swagger,如果是false,在浏览器将无法访问
                .enable(flag)
                // 通过.select()方法,去配置扫描接口,RequestHandlerSelectors配置如何扫描接口
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.jiang.controller"))
                .paths(PathSelectors.ant("/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值