栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

狂神说笔记——SpringBoot操作数据库22-4

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

狂神说笔记——SpringBoot操作数据库22-4

SpringBoot操作数据库(4) 6.集成Swagger

官网:API documentation & Design Tools for Teams | Swagger

1.Swagger简介

前后端分离

前端 -> 前端控制层、视图层;后端 -> 后端控制层、服务层、数据访问层;前后端通过API进行交互;前后端相对独立且松耦合。

产生的问题

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

解决方案

首先定义schema[计划的提纲],并实时跟踪最新的API,降低集成风险。早些年:指定word计划文档;前后端分离:

前端测试后端接口:postman后端提供接口,需要实时更新最新的消息及改动!

Swagger

号称世界上最流行的API框架;Restful API文档在线自动生成器 => API 文档 与API 定义同步更新。直接运行,在线测试API;支持多种语言(如:Java,PHP等);官网:https://swagger.io/ 2.SpringBoot集成Swagger

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

Springfox -> swagger2;swagger -> springmvc。

使用Swagger

要求:JDK1.8 + 否则swagger2无法运行。

步骤:

    新建一个SpringBoot-web项目

    添加Maven依赖


    io.springfox
    springfox-swagger2
    2.9.2



    io.springfox
    springfox-swagger-ui
    2.9.2

    编写HelloController,测试确保运行成功!
@RestController
public class HelloController {
    //  默认请求  -->  /error
    @RequestMapping(value = "/hello")
    public String hello(){
        return "Hello";
    }
}
    要使用Swagger,我们需要编写一个配置类-SwaggerConfig来配置 Swagger
@Configuration // 配置类
@EnableSwagger2 // 开启Swagger2的自动配置
public class SwaggerConfig {
    
}
    由于spring boot版本问题,如果启动项目报错空指针异常,将spring boot降级为2.5.5版本即可。访问测试:http://localhost:8080/swagger-ui.html,可以看到swagger的界面。

注:3.0的jar访问不了,降级2.9.2就可以了。 3.配置Swagger

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

4.配置扫描端口
    构建Docket时通过select()方法配置怎么扫描接口。
@Bean
public Docket docket() {
    return new Docket(documentationType.SWAGGER_2)
        .apiInfo(apiInfo())
        .select() // 通过.select()方法,去配置扫描接口,RequestHandlerSelectors配置如何扫描接口
        .apis(RequestHandlerSelectors.basePackage("com.github.controller"))
        .build();
}

    重启项目测试,由于我们配置根据包的路径扫描接口,所以只能看到一个类!!!

    除了通过包路径配置扫描接口外,还可以通过配置其他方式扫描接口,这里注释一下所有的配置方式:

any() // 扫描所有,项目中的所有接口都会被扫描到
none() // 不扫描接口
// 通过方法上的注解扫描,如withMethodAnnotation(GetMapping.class)只扫描get请求
withMethodAnnotation(final Class annotation)
// 通过类上的注解扫描,如.withClassAnnotation(Controller.class)只扫描有controller注解的类中的接口
withClassAnnotation(final Class annotation)
basePackage(final String basePackage) // 根据包路径扫描接口
    除此之外,还可以配置接口扫描过滤:
@Bean
public Docket docket() {
    return new Docket(documentationType.SWAGGER_2)
        .apiInfo(apiInfo())
        .select()// 通过.select()方法,去配置扫描接口,RequestHandlerSelectors配置如何扫描接口
        .apis(RequestHandlerSelectors.basePackage("com.github.controller"))
        // 配置如何通过path过滤,即这里只扫描请求以/github开头的接口
        .paths(PathSelectors.ant("/github分0-59,-*/小时0-23,-*/日期1-31,-*?/L W C月份1-12,-*/星期0-7 或 SUN-SAT 0,7是SUN,-*?/L C # 
特殊字符代表含义
,枚举
-区间
*任意
/步长
?日/星期冲突匹配
L最后
W工作日
C和calendar联系后计算过的值
#星期,4#2,第二个星期三

测试步骤:

    创建一个ScheduledService

里面存在一个hello方法,他需要定时执行,怎么处理呢?

@Service
public class ScheduledService {
    // 秒 分 时 日 月 周几
    // 0 * * * * MON-FRI
    // 注意cron表达式的用法
    @Scheduled(cron = "0 * * * * 0-7")
    public void hello(){
        System.out.println("hello……");
    }
    
    @Scheduled(cron = "0/2 * * * * ?")
    public void hello2(){
        System.out.println("hello2……");
    }
    
}
    这里写完定时任务之后,需要在主程序上增加@EnableScheduling开启定时任务功能。
@EnableAsync // 开启异步注解功能
@EnableScheduling // 开启基于注解的定时任务
@SpringBootApplication
public class Springboot09TestApplication {

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

}

    详细了解下cron表达式:http://www.bejson.com/othertools/cron/常用的表达式:
(1)0/2 * * * * ?   表示每2秒 执行任务
(1)0 0/2 * * * ?   表示每2分钟 执行任务
(1)0 0 2 1 * ?   表示在每月的1日的凌晨2点调整任务
(2)0 15 10 ? * MON-FRI   表示周一到周五每天上午10:15执行作业
(3)0 15 10 ? 6L 2002-2006   表示2002-2006年的每个月的最后一个星期五上午10:15执行作
(4)0 0 10,14,16 * * ?   每天上午10点,下午2点,4点
(5)0 0/30 9-17 * * ?   朝九晚五工作时间内每半小时
(6)0 0 12 ? * WED   表示每个星期三中午12点
(7)0 0 12 * * ?   每天中午12点触发
(8)0 15 10 ? * *   每天上午10:15触发
(9)0 15 10 * * ?     每天上午10:15触发
(10)0 15 10 * * ?   每天上午10:15触发
(11)0 15 10 * * ? 2005   2005年的每天上午10:15触发
(12)0 * 14 * * ?     在每天下午2点到下午2:59期间的每1分钟触发
(13)0 0/5 14 * * ?   在每天下午2点到下午2:55期间的每5分钟触发
(14)0 0/5 14,18 * * ?     在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
(15)0 0-5 14 * * ?   在每天下午2点到下午2:05期间的每1分钟触发
(16)0 10,44 14 ? 3 WED   每年三月的星期三的下午2:10和2:44触发
(17)0 15 10 ? * MON-FRI   周一至周五的上午10:15触发
(18)0 15 10 15 * ?   每月15日上午10:15触发
(19)0 15 10 L * ?   每月最后一日的上午10:15触发
(20)0 15 10 ? * 6L   每月的最后一个星期五上午10:15触发
(21)0 15 10 ? * 6L 2002-2005   2002年至2005年的每月的最后一个星期五上午10:15触发
(22)0 15 10 ? * 6#3   每月的第三个星期五上午10:15触发
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/732945.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号