SpringBoot(四)

一、Swagger

1、简介 

Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步。

前后端分离

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

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

  • 前后端通过API进行交互

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

2、作用

  • 接口的文档在线自动生成。

  • 功能测试。

3、Swagger主要项目

  • Swagger-tools:提供各种与Swagger进行集成和交互的工具。例如模式检验、Swagger 1.2文档转换成Swagger 2.0文档等功能。

  • Swagger-core: 用于Java/Scala的的Swagger实现。与JAX-RS(Jersey、Resteasy、CXF...)、Servlets和Play框架进行集成。

  • Swagger-js: 用于JavaScript的Swagger实现。

  • Swagger-node-express: Swagger模块,用于node.js的Express web应用框架。

  • Swagger-ui:一个无依赖的HTML、JS和CSS集合,可以为Swagger兼容API动态生成优雅文档。

  • Swagger-codegen:一个模板驱动引擎,通过分析用户Swagger资源声明以各种语言生成客户端代码。

4、SpringBoot集成Swagger

新建一个spirngboot项目,勾选组件时勾选Spring-Web

导入Swagger依赖

编写HelloController

在主程序同级目录下新建controller包,其中新建HelloController类

启动主程序

编写Swagger配置类

在主程序同级目录下新建config包,其中新建SwaggerConfig配置类

  • 用@Configuration注解注明这是配置类

  • 同时用@EnableSwagger2注解开启Swagger2

测试进入Sawgger页面

重启主程序,访问localhost:8080/swagger-ui.html

5、配置Swagger API信息

Swagger实例Bean是Docket,所以通过配置Docket实例来配置Swaggger。

通过配置ApiInfo类的信息然后传入Docket的bean实例

整体代码SwaggerConfig.java

重新访问localhost:8080/swagger-ui.html,可以看到Swagger信息已经变更成我们定义的信息

6、配置Swagger自定义扫描接口

在这个ui界面中,可以看到扫描了两个controller接口,上面的是默认的controller接口,下面是我们自己写的hellocontroller

构建Docket时通过select()方法配置怎么扫描接口。

5、配置Swagger开关

通过Docket对象的.enable方法来配置swagger是否启动

开发环境和正式环境时切换

首先在resources目录下新建两种springboot配置文件:

开发环境:application-dev.properties

server.port=8081

正式环境:application-pro.properties

server.port=8082

然后在主配置文件application.properties中激活开发环境

spring.profiles.active=dev

然后在 SwaggerConfig 中的 docket() 方法中添加代码:

  • 首先给该方法传一个参数Environment

Environment environment
  • 首先设置药配置的Swagger环境:这里可以添加多个环境

Profiles profiles = Profiles.of("dev", "test");
  • 然后通过environment.acceptsProfiles方法判断是否处在上一步设定的dev/test环境中,返回一个boolean的值,我们用flag接收

boolean flag = environment.acceptsProfiles(profiles);
  • 然后修改enable中的参数为flag,即通过flag来判断是否开启Swagger

.enable(flag)//通过flag判断是否开启

完整代码

然后启动主程序测试:由于激活了dev开发环境,所以访问localhost:8081/swagger-ui.html

成功开启swagger,如果我们修改主配置文件,激活pro

spring.profiles.active=pro

再次重启主程序测试,访问端口8082对应的地址localhost:8082/swagger-ui.html

6、配置API文档分组

(1)、设置默认组名

页面里默认只有一个组且组名为default

在docket通过.groupName中设置组名

重启测试,可以看到组名已更改

(2)、配置多个组

一个Docket实例就对应着一个组,因此我们配置多个docket就对应着多个组

新增两个Docket

再次重启测试

7、配置Model实体类

新建实体类

在主程序同级目录下新建pojo包,其中新建User实体类

编写对应请求接口

在HelloController中新增一个方法返回实体类的实例对象即可映射到实体项中

启动测试

常用注解

  • @ApiModel为类添加注释

  • @ApiModelProperty为类属性添加注释

同样可以在Controller类和其中的方法上添加相应的注解

重启测试,即可以看到注释信息

同样可以在Controller类和其中的方法上添加相应的注解

重启即可看到对应的注解

8、测试Swagger的使用

(1)、测试传参

在HelloController中新增一个方法,参数为username,可以用@ApiParam给该参数添加注解

(2)、测试错误

在HelloController中新增一个方法,参数为User,可以用@ApiParam给该参数添加注解

二、任务

1、异步任务

异步(async)是相对于同步(sync)来说的,简单理解,同步是串行的,异步是并行的。

在想要异步执行的方法上加上@Async注解,在controller上加上@EnableAsync,即可。注意,这里的异步方法,只能在自身之外调用,在本类调用是无效的。

controller层

serviceceng

TaskApplication,java

测试,网页瞬间响应,后台代码依旧延迟3秒执行

2、定时任务

Spring为我们提供了异步执行任务调度的方式,提供了两个接口。

  • TaskExecutor接口

  • TaskScheduler接口

两个注解:

  • @EnableScheduling

  • @Scheduled

创建一个ScheduledService

这里写完定时任务之后,我们需要在主程序上增加@EnableScheduling 开启定时任务功能

常见的cron表达式

  • 0/2 * * * * ?   表示每2秒 执行任务

  • 0 0/2 * * * ?    表示每2分钟 执行任务

  • 0 0 2 1 * ?   表示在每月的1日的凌晨2点调整任务

  • 0 15 10 ? * MON-FRI   表示周一到周五每天上午10:15执行作业

  • 0 15 10 ? 6L 2002-2006   表示2002-2006年的每个月的最后一个星期五上午10:15执行作

  • 0 0 10,14,16 * * ?   每天上午10点,下午2点,4点

  • 0 0/30 9-17 * * ?   朝九晚五工作时间内每半小时

  • 0 0 12 ? * WED    表示每个星期三中午12点

  • 0 0 12 * * ?   每天中午12点触发

  • 0 15 10 ? * *    每天上午10:15触发

  • 0 15 10 * * ?     每天上午10:15触发

  • 0 15 10 * * ?    每天上午10:15触发

  • 0 15 10 * * ? 2005    2005年的每天上午10:15触发

  • 0 * 14 * * ?     在每天下午2点到下午2:59期间的每1分钟触发

  • 0 0/5 14 * * ?    在每天下午2点到下午2:55期间的每5分钟触发

  • 0 0/5 14,18 * * ?     在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发

  • 0 0-5 14 * * ?    在每天下午2点到下午2:05期间的每1分钟触发

  • 0 10,44 14 ? 3 WED    每年三月的星期三的下午2:10和2:44触发

  • 0 15 10 ? * MON-FRI    周一至周五的上午10:15触发

  • 0 15 10 15 * ?    每月15日上午10:15触发

  • 0 15 10 L * ?    每月最后一日的上午10:15触发

  • 0 15 10 ? * 6L    每月的最后一个星期五上午10:15触发

  • 0 15 10 ? * 6L 2002-2005   2002年至2005年的每月的最后一个星期五上午10:15触发

  • 0 15 10 ? * 6#3   每月的第三个星期五上午10:15触发

3、邮件任务

操作步骤:

  • 邮件发送需要引入spring-boot-start-mail

  • SpringBoot 自动配置MailSenderAutoConfiguration

  • 定义MailProperties内容,配置在application.yml中

  • 自动装配JavaMailSender

  • 测试邮件发送

引入pom依赖

配置文件application.properties:

Spring单元测试

三、Dubbo和Zookeeper集成

1、分布式理论

分布式系统是由一组通过网络进行通信、为了完成共同的任务而协调工作的计算机节点组成的系统。分布式系统的出现是为了用廉价的、普通的机器完成单个计算机无法完成的计算、存储任务。其目的是利用更多的机器,处理更多的数据。

作用:提供服务自动注册,自动发现等高效服务治理方案

2、运行原理

  • 启动容器,相当于在启动Dubbo的Provider

  • 启动后回曲注册中心进行注册,注册所有可以提供的服务列表

  • 在Consumer启动后会去Registry中获取服务列表和Provider的地址,进行丁云

  • 当Provider有修改后,注册中心会把消息推送给Consummer,使用了观察者设计模式

  • 根据获取到的Provider地址,真实调用Provider中的功能,在consummer方使用了代理设计模式,创建了一个Provider方类的一个代理对象。通过代理对象获取Provider中的真实功能,起到保护Provider真实功能的作用。

  • Consumer和Provider每隔一分钟会向Monitor发送统计信息,统计信息包括访问次数,频率等。

3、Dubbo注册中心

  • Zookeeper

Zookeeper:分布式协调组件,本质上是一个软件

优点:支持网络集群

缺点:稳定性受限于zookeeper

  • redis注册中心

优点:性能高(内存型数据库)

缺点:对服务器的环境要求较高

  • Multicast

优点:面中心化,不需要额外安装注册中心

缺点:建议同机房(局域网)内使用

  • Simple

适用于测试环境,不支持集群

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DF10F-0001A

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值